global class NFM605Batch implements Database.Batchable < sObject > , Database.AllowsCallouts { public String query; private List < Id > idList; public String qDate; public Date queryDate; public Boolean reissueBatch = false; global NFM605Batch(List < Id > idList) { this.idList = idList; } // eg:19000101 global NFM605Batch(String querydate) { this.qDate = querydate; } // 指定数据 global NFM605Batch(Boolean reissueBatch) { this.reissueBatch = reissueBatch; } global NFM605Batch() {} global Database.QueryLocator start(Database.BatchableContext bc) { if (this.idList != null && this.idList.size() != 0) { System.debug('+++++++++++指定数据Id+++++++++++' ); return Database.getQueryLocator([ SELECT id,NewMaintenance_Contract__c,reissueBatch__c FROM NewMaintenanceReport_Task__c WHERE id in : idList]); } else if (String.isNotBlank(this.qDate)) { queryDate = NFMUtil.parseStr2Date(qDate); return Database.getQueryLocator([ SELECT Id,Name,NewMaintenance_Contract__c,reissueBatch__c FROM NewMaintenanceReport_Task__c WHERE CorrespondingPeriod__c =:queryDate]); } else if(this.reissueBatch){ System.debug('+++++++++++数据量大时将数据的reissueBatch__c设置为true+++++++++++' ); return Database.getQueryLocator([ SELECT id,NewMaintenance_Contract__c,reissueBatch__c FROM NewMaintenanceReport_Task__c WHERE reissueBatch__c = true]); } else { System.debug('+++++++++++指定默认昨天+++++++++++' ); queryDate = Date.today().addDays(-1); return Database.getQueryLocator([ SELECT Id,Name,NewMaintenance_Contract__c,reissueBatch__c FROM NewMaintenanceReport_Task__c WHERE CorrespondingPeriod__c =:queryDate ]); } } global void execute(Database.BatchableContext BC, list < NewMaintenanceReport_Task__c > scope) { List < Id > reportIdList = new List < Id >(); List ncIdList = new List (); List updateList = new List(); Map < Id, Set < Id >> tempIdMap = new Map < Id, Set < Id >> (); for (NewMaintenanceReport_Task__c task: scope) { if (task.reissueBatch__c) { task.reissueBatch__c = false; updateList.add(task); } Id contractId = task.NewMaintenance_Contract__c; Set < Id > idSet = new Set < Id > (); if (tempIdMap.containsKey(contractId)) { idSet = tempIdMap.get(contractId); } idSet.add(task.Id); tempIdMap.put(contractId, idSet); } // 查找符合的数据 List < Repair__c > repairList = [ SELECT Id, VM_Maintenance_Contract__c, Maintenance_Contract__c, MaintenanceContractType__c FROM Repair__c WHERE Maintenance_Contract__c IN: tempIdMap.keySet() AND MaintenanceContractType__c = '服务合同' AND RepairSubOrder__c != '' ]; for (Repair__c repair :repairList) { for (Id taskId: tempIdMap.get(repair.Maintenance_Contract__c)) { reportIdList.add(taskId); } } if (reportIdList.size() >0 ) { NFM605Controller.executeNotFuture('', reportIdList); } if (updateList.size() > 0) { update updateList; } } global void finish(Database.BatchableContext BC) { System.debug('finish----->NFM605Controller'); } }