global class RentalQueueShippmentDateSumBatch implements Database.Batchable { public String query; global RentalQueueShippmentDateSumBatch() { this.query = query; } global Database.QueryLocator start(Database.BatchableContext bc) { query ='select Id FROM Rental_Apply__c '; query += 'where Queue_Count__c > 0'; return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, List raList) { List raIdList=new List(); for (Rental_Apply__c ra : raList) { raIdList.add(ra.Id); } // List raesList=[select Rental_Apply__c,Max(QueueShippmentDate__c) qsd FROM Rental_Apply_Equipment_Set__c WHERE Rental_Apply__c in :raIdList AND QueueShippmentDate__c !=NULL AND First_RAESD_Is_Main__c = true AND First_RAESD__r.RAESD_Status__c = '排队中' group by Rental_Apply__c]; List raesList=[select Rental_Apply__c,Rental_Apply__r.QueueShippmentDate__c,QueueShippmentDate__c FROM Rental_Apply_Equipment_Set__c WHERE Rental_Apply__c in :raIdList AND First_RAESD_Is_Main__c = true AND First_RAESD__r.RAESD_Status__c = '排队中' order by Rental_Apply__c, QueueShippmentDate__c DESC nulls first]; List uraList=new List(); Map RaIdMap = new Map(); for (Rental_Apply_Equipment_Set__c raes : raesList) { Rental_Apply__c ra = new Rental_Apply__c(); // ra.Id=(Id)raes.get('Rental_Apply__c'); // ra.QueueShippmentDate__c = (Date)raes.get('qsd'); // 不相等的时候在更新 // raes.Rental_Apply__r.QueueShippmentDate__c 空 raes.QueueShippmentDate__c 不空 // raes.Rental_Apply__r.QueueShippmentDate__c 不空 raes.QueueShippmentDate__c 空 // raes.Rental_Apply__r.QueueShippmentDate__c 不空 raes.QueueShippmentDate__c 不空 && 这两这个不相等 if( !RaIdMap.containsKey(raes.Rental_Apply__c) &&((raes.Rental_Apply__r.QueueShippmentDate__c == null && raes.QueueShippmentDate__c != null) || (raes.Rental_Apply__r.QueueShippmentDate__c != null && raes.QueueShippmentDate__c == null) || (raes.Rental_Apply__r.QueueShippmentDate__c != null && raes.QueueShippmentDate__c != null && raes.Rental_Apply__r.QueueShippmentDate__c != raes.QueueShippmentDate__c) )){ ra.Id=raes.Rental_Apply__c; ra.QueueShippmentDate__c = raes.QueueShippmentDate__c; uraList.add(ra); } if(RaIdMap.containsKey(raes.Rental_Apply__c))continue; RaIdMap.put(raes.Rental_Apply__c, raes.Rental_Apply__c); } if(uraList.size() > 0){ update uraList; } } global void finish(Database.BatchableContext BC) { if(System.Test.isRunningTest()){ test(); } } @TestVisible private static void test() { 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++; } }