global class RentalApplyDailyBatch implements Database.Batchable<sObject>, Database.Stateful {
    global List<String> errorList = new List<String>();
    global Integer allCount = 0; // 总明细条目
    global Integer allCountDone = 0;
    global Integer updatedCount = 0; // 实际更新的条目
    global Integer round = 4; // 跑几次

    Boolean IsNeedExecute = false; // 2021-03-05  mzy  WLIG-BYHD79  SFDC环境batch合并调查  是否符合执行条件

    global RentalApplyDailyBatch() {}
    global RentalApplyDailyBatch(Integer rd) {
        round = rd;
    }

    // 2021-03-05  mzy  WLIG-BYHD79  SFDC环境batch合并调查  start
    global RentalApplyDailyBatch(Boolean NeedExecute) {
        this.IsNeedExecute = NeedExecute;
    }
    // 2021-03-05  mzy  WLIG-BYHD79  SFDC环境batch合并调查  end

    global Database.QueryLocator start(Database.BatchableContext bc) {
        return Database.getQueryLocator([
            SELECT Salesdept__c
                 , Work_Location__c
                 , Owner_province__c
                 , Branch__c
                 , Onwer_job_category__c
                 , Salesdepartment__c
                 , Salesdept_text_Update_F__c
                 , Owner_Info_text_Update_F__c
              FROM Rental_Apply__c
             WHERE Salesdept_text_Update_F__c = true OR Owner_Info_text_Update_F__c = true
              ]);
    }

    global void execute(Database.BatchableContext BC, List<Rental_Apply__c> raList) {
        allCount += raList.size();
        Savepoint sp = Database.setSavePoint();
        try {
            for(Rental_Apply__c ra:raList) {
                if(ra.Salesdept_text_Update_F__c) {
                    ra.Salesdept_text__c = ra.Salesdept__c;
                }
                if(ra.Owner_Info_text_Update_F__c) {
                    ra.Work_Location_text__c      = ra.Work_Location__c;
                    ra.Owner_province_text__c     = ra.Owner_province__c;
                    ra.Branch_text__c             = ra.Branch__c;
                    ra.Onwer_job_category_text__c = ra.Onwer_job_category__c;
                    ra.Salesdepartment_text__c    = ra.Salesdepartment__c;
                }
            }
            Database.update(raList);
            updatedCount += raList.size();
            allCountDone += raList.size();
        }
        catch (Exception e) {
            Database.rollback(sp);
            errorList.add(e.getMessage() + '\n' + e.getStackTraceString());
            System.debug(LoggingLevel.ERROR, e.getMessage() + '\n' + e.getStackTraceString());
        }
    }

    global void finish(Database.BatchableContext BC) {
        round -= 1;
        if (allCount != allCountDone || errorList.size() > 0) {
            // 出现任何错误都重跑
            if (round > 0) {
                System.debug(round);
                RentalApplyDailyBatch bat = new RentalApplyDailyBatch(round);
                Database.executeBatch(bat);
            }
            else {
                BatchEmailUtil be = new BatchEmailUtil();
                String[] toList = new String[]{};
                String title = '申请者信息text字段更新batch失败';
                String[] ccList = new String[]{};
                toList.add('shuo_wang@olympus.com.cn');
                for (OrgWideEmailAddress tmpEmailObj : [SELECT Id, Address, DisplayName
                        FROM OrgWideEmailAddress
                        WHERE DisplayName like 'BatchNotify']) {
                    toList.add(tmpEmailObj.Address);
                }
                be.failedMail(toList, ccList, title, String.join(this.errorList, '\n'), allCount, allCountDone, errorList.size());
                be.send();
            }
        }

       //2021-03-05  mzy  WLIG-BYHD79  SFDC环境batch合并调查  start
        if(!Test.isRunningTest() &&IsNeedExecute==true){
            //batch里调用下一个batch时，希望跟原有的Schedule里面传的条数保持一致
            Id execBTId = Database.executebatch(new FixtureSetDetailDailyUpdateBatch(true),200);
        }
        //2021-03-05  mzy  WLIG-BYHD79  SFDC环境batch合并调查 end 

    }
}