global class NextMContractHistoricalBatch implements Database.Batchable { public String query; global NextMContractHistoricalBatch() { this.query = query; } global Database.QueryLocator start(Database.BatchableContext bc) { query = 'select Id,Maintenance_Contract__c,Maintenance_Contract__r.id,Maintenance_Contract__r.RecordType_Name__c,Asset__r.name,Asset__r.id,asset__r.First_Service_number__c,Maintenance_Contract__r.Maintenance_Contract_No_F__c,Maintenance_Contract__r.CreatedDate' +' from Maintenance_Contract_Asset__c where (Maintenance_Contract__r.Status__c = \'契約\' or Maintenance_Contract__r.Status__c = \'契約満了\') and Maintenance_Contract__r.RecordType_Name__c = \'多年保修合同\' order by Asset__c,Maintenance_Contract__r.CreatedDate desc'; return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, list mcaList) { Map mcMap = new Map(); for(Maintenance_Contract_Asset__c mca:mcaList){ if (mca.Asset__r.First_Service_number__c!=null) { if (!mcMap.containsKey(mca.Asset__r.id)) { mcMap.put(mca.Asset__r.id,mca); } if(mcMap.containsKey(mca.Asset__r.id)&&mca.Maintenance_Contract__r.CreatedDate>mcMap.get(mca.Asset__r.id).Maintenance_Contract__r.CreatedDate){ mcMap.remove(mca.Asset__r.id); mcMap.put(mca.Asset__r.id,mca); } } } List mcids = new List(); for ( Maintenance_Contract_Asset__c mca:mcMap.values()) { if (!mcids.contains(mca.Maintenance_Contract__r.id)) { mcids.add(mca.Maintenance_Contract__r.id); } } List mcas = [select Id,Maintenance_Contract__r.RecordType_Name__c,Next_Maintenance_Contract__c,Asset__r.name,Asset__r.id,asset__r.First_Service_number__c,Maintenance_Contract__r.CreatedDate from Maintenance_Contract_Asset__c where Maintenance_Contract__c in :mcids]; List updateList = new List(); List mcsql = new List(); for (Maintenance_Contract_Asset__c mca:mcas) { mcsql.add(mca.Asset__r.First_Service_number__c); } List mcs = [select Id,name,Maintenance_Contract_No__c from Maintenance_Contract__c where Maintenance_Contract_No__c in :mcsql ]; Map mcMap2 = new Map(); for (Maintenance_Contract__c mc :mcs) { if (!mcMap2.containsKey(mc.Maintenance_Contract_No__c)) { mcMap2.put(mc.Maintenance_Contract_No__c,mc); } } for (Maintenance_Contract_Asset__c mca:mcas) { Maintenance_Contract_Asset__c mcaNew = new Maintenance_Contract_Asset__c(); mcaNew.id = mca.id; mcaNew.Next_Maintenance_Contract__c = mcMap2.get(mca.Asset__r.First_Service_number__c).id; updateList.add(mcaNew); } if (updateList.size()>0) { update updateList; } } global void finish(Database.BatchableContext BC) { 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++; } }