global class LogAutoSendBatch implements Database.Batchable<sObject>, Database.AllowsCallouts, Database.Stateful {

    private String typeNFM;
    private String messageGroupNumber;
    private Datetime times;
    private Boolean isForecast;// 20220318 ljh SWAG-CC54R2 add
    private String loginId;
    /**
     * コンスタント
     */
    global LogAutoSendBatch() {
    }
    global LogAutoSendBatch(String loginId) {
        this.loginId = loginId;
    }
    // 2023-1-19 zyh DB202301301244 add start
    global LogAutoSendBatch(String type,String message) {
        this.typeNFM = type;
        this.messageGroupNumber = message;
        System.debug('type++++++'+type + 'message+++++' + message);
    }
    // 2023-1-19 zyh DB202301301244 add end
    // 20220318 ljh SWAG-CC54R2 add start
    global LogAutoSendBatch(String type,Boolean isForecast) {
        this.typeNFM = type;
        this.isForecast = isForecast;
    }
    // 20220318 ljh SWAG-CC54R2 add end
    //20191224 HWAG-BK65E8 add start
    global LogAutoSendBatch(String type, String message, Datetime times) {
        this.typeNFM = type;
        this.messageGroupNumber = message;
        this.times = times;
    }
    //20191224 HWAG-BK65E8 add end
    /**
     * startには、queryを実行、备品申请借出历史を検索
     */
    public Integer max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt);
    global Database.QueryLocator start(Database.BatchableContext BC) {

        String profileId = UserInfo.getProfileId();
        // 20220318 ljh SWAG-CC54R2 add start
        if(String.isNotBlank(typeNFM) && typeNFM == 'NFM010' && String.isBlank(messageGroupNumber)){
            return Database.getQueryLocator(
                [SELECT Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c, Log4__c, Log5__c, Log6__c,
                 Log7__c, Log8__c, Log9__c, Log10__c, Log11__c, Log12__c, MessageGroupNumber__c, Type__c,
                 retry_cnt__c, NFM501Future_Count__c, NFM501_Web_Annex_Count__c
                 FROM BatchIF_Log__c
                 WHERE RowDataFlg__c = true
                 AND (retry_cnt__c = null OR (retry_cnt__c != null AND retry_cnt__c > 0 AND retry_cnt__c < : max_cnt))
                 AND Type__c = : typeNFM ]
                );
        }
        // gzw 603 重发判断 暂时用
        // ljh只执行自己这条日志，而且这个日志retry_cnt__c不是0
        else if (String.isNotBlank(loginId)) {
            return Database.getQueryLocator(
                [SELECT Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c, Log4__c, Log5__c, Log6__c,
                    Log7__c, Log8__c, Log9__c, Log10__c, Log11__c, Log12__c, MessageGroupNumber__c, Type__c,
                    retry_cnt__c, NFM501Future_Count__c, NFM501_Web_Annex_Count__c
                    FROM BatchIF_Log__c
                    WHERE RowDataFlg__c = true
                    AND retry_cnt__c != 0
                    AND id = : loginId ]
                );
        }
        // gzw 603 重发判断 暂时用
        // 2023-01-19   zyh   add start
        else if (String.isNotBlank(typeNFM) && String.isNotBlank(messageGroupNumber) && times == null) {
            return Database.getQueryLocator(
                [SELECT Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c, Log4__c, Log5__c, Log6__c,
                 Log7__c, Log8__c, Log9__c, Log10__c, Log11__c, Log12__c, MessageGroupNumber__c, Type__c,
                 retry_cnt__c, NFM501Future_Count__c, NFM501_Web_Annex_Count__c
                 FROM BatchIF_Log__c
                 WHERE RowDataFlg__c = true
                                       AND Type__c = : typeNFM AND MessageGroupNumber__c = : messageGroupNumber
                                                    ]
                );
        }
        // 2023-01-19   zyh   add end
        else if (String.isNotBlank(typeNFM) && String.isNotBlank(messageGroupNumber) && times != null) {
        // 20220318 ljh SWAG-CC54R2 add end
        //20191224 HWAG-BK65E8 add start
        // if (String.isNotBlank(typeNFM) && String.isNotBlank(messageGroupNumber) && times != null) {
            return Database.getQueryLocator(
                [SELECT Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c, Log4__c, Log5__c, Log6__c,
                 Log7__c, Log8__c, Log9__c, Log10__c, Log11__c, Log12__c, MessageGroupNumber__c, Type__c,
                 retry_cnt__c, NFM501Future_Count__c, NFM501_Web_Annex_Count__c
                 FROM BatchIF_Log__c
                 WHERE RowDataFlg__c = true
                                        AND Type__c != 'NFM007'  // 2023-01-18   ZYH   ADD
                                       AND Type__c = : typeNFM AND CreatedDate >= : times AND MessageGroupNumber__c >= : messageGroupNumber
                                                     order by MessageGroupNumber__c asc ]
                );
            //20191224 HWAG-BK65E8 add end
        } else if (profileId.left(15).equals('00e10000000dzzG') || profileId.left(15).equals('00e10000000Y3o5')) {
            return Database.getQueryLocator(
                [SELECT Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c, Log4__c, Log5__c, Log6__c,
                 Log7__c, Log8__c, Log9__c, Log10__c, Log11__c, Log12__c, MessageGroupNumber__c, Type__c,
                 retry_cnt__c, NFM501Future_Count__c, NFM501_Web_Annex_Count__c
                 FROM BatchIF_Log__c
                 WHERE RowDataFlg__c = true
                                        AND Type__c != 'NFM007'  // 2023-01-18   ZYH   ADD
                                       AND ((retry_cnt__c != null AND retry_cnt__c > 0 AND retry_cnt__c < : max_cnt)
                                            OR (NFM501Future_Count__c != null
                                                AND NFM501Future_Count__c > 0 AND NFM501Future_Count__c < : max_cnt)
                                            OR(NFM501_Web_Annex_Count__c != null
                                               AND NFM501_Web_Annex_Count__c > 0 AND NFM501_Web_Annex_Count__c < : max_cnt))]
                );
        }else {
            return Database.getQueryLocator(
                [SELECT Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c, Log4__c, Log5__c, Log6__c,
                 Log7__c, Log8__c, Log9__c, Log10__c, Log11__c, Log12__c, MessageGroupNumber__c, Type__c,
                 retry_cnt__c, NFM501Future_Count__c, NFM501_Web_Annex_Count__c
                 FROM BatchIF_Log__c
                 WHERE RowDataFlg__c = true
                                        AND Type__c != 'NFM007'  // 2023-01-18   ZYH   ADD
                                       AND ((retry_cnt__c != null AND retry_cnt__c > 0 AND retry_cnt__c < : max_cnt)
                                            OR (NFM501Future_Count__c != null
                                                AND NFM501Future_Count__c > 0 AND NFM501Future_Count__c < : max_cnt)
                                            OR(NFM501_Web_Annex_Count__c != null
                                               AND NFM501_Web_Annex_Count__c > 0 AND NFM501_Web_Annex_Count__c < : max_cnt))
                                       AND ownerId = : UserInfo.getUserId()]
                );
        }
    }

    global void execute(Database.BatchableContext BC, List<BatchIF_Log__c> rowDataList) {
        String strType_c = null;
        Integer NFM501Future_Count = null;
        Integer NFM501_Web_Annex_Count = null;
        Integer NFM501_Other_Annex_Count = null;
        for (BatchIF_Log__c rowData : rowDataList) {
            strType_c = String.valueOf(rowData.get('Type__c'));
            NFM501Future_Count = Integer.valueOf(rowData.get('NFM501Future_Count__c'));
            NFM501_Web_Annex_Count = Integer.valueOf(rowData.get('NFM501_Web_Annex_Count__c'));

            if (strType_c == 'MDMITM') {
                // CHAN-BH72Y9 start
                // 原代码
                //MDMITMWebService.execute(rowData.Id);
                MDMITMRest.execute(rowData.Id);
                // CHAN-BH72Y9 end
            }
            if (strType_c == 'NFM001') {
                NFM001Controller.execute(rowData, null);
            }
            if (strType_c == 'NFM002') {
                NFM002WebService.execute(rowData.Id);
            }
            if (strType_c == 'NFM006') {
                NFM006WebService.execute(rowData.Id);
            }
            if (strType_c == 'NFM007') {
                NFM007Controller.execute(rowData, null);
            }
            if (strType_c == 'NFM008') {
                // CHAN-BB9CX4 20190419 LHJ Start
                //NFM008WebService.execute(rowData.Id);
                NFM008Rest.main(rowData.Id);
                // CHAN-BB9CX4 20190419 LHJ End
            }
            if (strType_c == 'NFM010') {
                // CHAN-BBC75D 20190424 LHJ Start
                //NFM010WebService.execute(rowData.Id);
                NFM010Rest.main(rowData.Id);
                // CHAN-BBC75D 20190424 LHJ Start
            }
            if (strType_c == 'NFM012') {
                // CHAN-BH72Y9 start
                // 原代码
                //NFM012WebService.execute(rowData.Id);
                NFM012Rest.main(rowData.Id);
                // CHAN-BH72Y9 end
            }
            if (strType_c == 'NFM103') {
                NFM103Controller.execute(rowData, null);
            }
            if (strType_c == 'NFM104') {
                // CHAN-BAF2VC 20190327 LHJ Start
                //NFM104WebService.execute(rowData.Id);
                NFM104Rest.main(rowData.Id);
                // CHAN-BAF2VC 20190327 LHJ Start
            }
            if (strType_c == 'NFM105') {
                // CHAN-BAW99B 20190408 LHJ Start
                //NFM105WebService.execute(rowData.Id);
                NFM105Rest.main(rowData.Id);
                // CHAN-BAW99B 20190408 LHJ End
            }
            if (strType_c == 'NFM106') {
                NFM106Controller.execute(rowData, null);
            }
            if (strType_c == 'NFM107') {
                NFM107Rest.main(rowData.Id);
            }
            if (strType_c == 'NFM108') {
                NFM108Rest.main(rowData.Id);
            }
            // 20200923 Gzw start
            if (strType_c == 'NFM109') {
                NFM109Rest.main(rowData.Id);
            }
            // 20200923 Gzw end
            if (strType_c == 'NFM110') {
                NFM110Rest.main(rowData.Id);
            }
            // 2021/12/1 fxk add Star
            if (strType_c == 'NFM115') {
                NFM115Controller.execute(rowData,null);
            }
            if (strType_c == 'NFM114') {
                NFM114Rest.main(rowData.Id);
            }
            // 2021/12/1 fxk add End
            // // 电子签收单发送SAP接口 thh 20220427 start 
            if (strType_c == 'NFM116') {
                NFM116Controller.execute(rowData,null);
            }
            // // 电子签收单发送SAP接口 thh 20220427 end 
            // XLIU-CEW9PD 零件预计齐备日期 -SFDC增加 LY 20220610 start
            if (strType_c == 'NFM117') {
                NFM117Rest.main(rowData.Id);
            }
            // XLIU-CEW9PD 零件预计齐备日期 -SFDC增加 LY 20220610 end
            // 三方接口
            if (strType_c == 'NFM201') {
                NFM201Controller.execute(rowData, null);
            }
            if (strType_c == 'NFM202') {
                NFM202Controller.execute(rowData, null);
            }
            if (strType_c == 'NFM203') {
                NFM203Rest.main(rowData.Id);
            }
            if (strType_c == 'NFM204') {
                NFM204Rest.main(rowData.Id);
            }
            if (strType_c == 'NFM205') {
                NFM205Rest.main(rowData.Id);
            }
            if (strType_c == 'NFM206') {
                NFM206Rest.main(rowData.Id);
            }
            if (strType_c == 'NFM207') {
                NFM207Controller.execute(rowData, null);
            }
            if (strType_c == 'NFM009') {
                NFM009Controller.execute(rowData, null);
            }
            if (strType_c == 'CPL003') {
                CPL003Rest.main(rowData.Id);
            }
            if (strType_c == 'NFM301') {
                NFM301Rest.main(rowData.Id);
            }
            if (strType_c == 'NFM401') {
                NFM401Controller.executeAuto(rowData);
            }
            // add tcm 20211207 start
            if (strType_c == 'NFM403') {
                NFM403Rest.main(rowData.Id);
            }
            // add tcm 20211207 end
            if (strType_c == 'NFM501' && NFM501Future_Count > 0 && NFM501Future_Count < max_cnt) {
                System.enqueueJob(new NFM501FutureController(rowData.id));
            }
            if (strType_c == 'NFM501' && NFM501_Web_Annex_Count > 0 && NFM501_Web_Annex_Count < max_cnt) {
                System.enqueueJob(new NFM502Controller(rowData.id));
            }

            if (strType_c == 'NFM601') {
                NFM601Controller.ManualExecute(rowData.Id);
            }
            if (strType_c == 'NFM602') {
                NFM602Controller.ManualExecute(rowData.Id);
            }
            if (strType_c == 'NFM606') {
                NFM606Controller.ManualExecute(rowData.Id);
            }
            if (strType_c == 'NFM603') {
                NFM603Controller.ManualExecute(rowData.Id);
            }
            if (strType_c == 'NFM605') {
                NFM605Controller.ManualExecute(rowData.Id);
            }
            if (strType_c == 'NFM607') {
                NFM607Rest.main(rowData.Id);
            }
            if (strType_c == 'NFM608') {
                NFM608Rest.main(rowData.Id);
            }
            if (strType_c == 'NFM609') {
                NFM609Rest.main(rowData.Id);
            }
            if (strType_c == 'NFM611') {
                NFM611Rest.main(rowData.Id);
            }
            if (strType_c == 'NFM612') {
                NFM612Rest.main(rowData.Id);
            }
            if (strType_c == 'NFM620') {
                NFM620Rest.main(rowData.Id);
            }
            if (strType_c == 'NFM623') {
                NFM623Rest.main(rowData.Id);
            }
            if (strType_c == 'NFM621') {
                NFM621Controller.execute(rowData, null);
            }
            //zhj 新方案改造 2023-01-06 start
            if (strType_c == 'NFM624') {//智慧医疗pk
                NFM624Rest.main(rowData.Id);
            }
            // if (strType_c == 'NFM624Rest2') {//智慧医疗pk
            //     NFMUtil.againSendToAWS624(rowData.Id);
            // }
            //zhj 新方案改造 2023-01-06 end
            if (strType_c == 'NFM622') {
                NFM622Controller.execute(rowData, null);
            }
            if (strType_c == 'NFM112') {//先款后修pk
                NFM112Controller.ManualExecute(rowData.id);
            }
            if (strType_c == 'NFM113') {//先款后修pk
                NFM113Rest.main(rowData.id);
            }
            if (strType_c == 'NFM701') {
                NFM701Controller.execute(rowData, null);
            }
            if (strType_c == 'NFM702') {
                NFM702Controller.execute(rowData, null);
            }
            if (strType_c == 'NFM703') {
                NFM703Controller.execute(rowData, null);
            }
            if (strType_c == 'NFM704') {
                NFM704Rest.main(rowData.Id);
            }
            if (strType_c == 'NFM705') {
                NFM705Rest.main(rowData.Id);
            }
            if (strType_c == 'NFM706') {
                NFM706Rest.main(rowData.Id);
            }
            if (strType_c == 'NFM707') {
                NFM707Rest.main(rowData.Id);
            }
        }
        if (System.Test.isRunningTest()) {
            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++;
        }
    }

    global void finish(Database.BatchableContext BC) {
        // 今回はやることないです
        // 20220318 ljh SWAG-CC54R2 add start
        if(String.isNotBlank(typeNFM) && typeNFM == 'NFM010' && isForecast){
            Id execBTId = Database.executeBatch(new BeforeSSOpportunityBatch(), 100);
        }
        // 20220318 ljh SWAG-CC54R2 add end
    }
}