global class NFM603Batch implements Database.Batchable < sObject > , Database.AllowsCallouts { public String query; public List repairIdList; global NFM603Batch(){} global NFM603Batch(List repairIdList) { this.repairIdList = repairIdList; } global Database.QueryLocator start(Database.BatchableContext bc) { // 如果前一个603的batch正在执行,则后一个等待5s再执行 List lstJobs = [SELECT Id FROM AsyncApexJob WHERE Id !=: bc.getJobId() AND (Status = 'Preparing' OR Status = 'Processing') AND ApexClass.Name = 'NFM603Batch']; if (lstJobs != null && lstJobs.size() > 0) { Long startTime = DateTime.now().getTime(); Long finishTime = DateTime.now().getTime(); while ((finishTime - startTime) < 5000) { //sleep for 5s finishTime = DateTime.now().getTime(); } } if (this.repairIdList != null) { return Database.getQueryLocator([SELECT Id,AwaitToSendAWS__c FROM Repair__c WHERE Id IN:repairIdList]); } return Database.getQueryLocator([SELECT Id,AwaitToSendAWS__c FROM Repair__c WHERE AwaitToSendAWS__c = true]); } global void execute(Database.BatchableContext BC, list repairList) { List < String > repairOrderIdList = new List < String >(); for (Repair__c repair: repairList) { repairOrderIdList.add(repair.Id); repair.AwaitToSendAWS__c = false; } NFM603Controller.executefuture(null,repairOrderIdList); update repairList; } global void finish(Database.BatchableContext BC) { } }