global class OpportunityUpdateOldRecordBatch implements Database.Batchable,Database.Stateful { public String query; public String logstr = ''; public String errorstr = ''; global OpportunityUpdateOldRecordBatch(String whereName) { // this.query = 'select id,Estimation_Id__c,Department_Class__c from Opportunity where Estimation_Id__c != null'; // this.query = 'select id,Estimation_Id__c,Department_Class__c from Opportunity where id = \'0061000000gGcrA\' or id = \'00610000018ejcI\''; this.query = 'select id,Estimation_Id__c,Department_Class__c from Opportunity where ' + whereName; logstr = logstr + 'OpportunityUpdateOldRecordBatch' + '\n开始'; } global Database.QueryLocator start(Database.BatchableContext bc) { return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, list scope) { Set quoteId = new Set(); Set oppId = new Set(); Set departId = new Set(); Map oppQUoteCreateDateMap = new Map(); Map> oppLIteMap = new Map>(); Map> rentMap = new Map>(); List oppList = new List(); oppList = scope; // List oppList = [select id,Estimation_Id__c,Department_Class__c from Opportunity where id = '0061000000gGcrA' or id = '00610000018ejcI']; for(Opportunity opp : oppList){ quoteId.add(opp.Estimation_Id__c); oppId.add(opp.Id); departId.add(opp.Department_Class__c); } List quoteList = [select Id,OpportunityId,CreatedDate from Quote where id = :quoteId order by CreatedDate]; for(Quote quo : quoteList){ oppQUoteCreateDateMap.put(quo.OpportunityId, quo.CreatedDate.date()); } List oppLItemList = [select id,OpportunityId,id__c from OpportunityLineItem where OpportunityId = :oppId and Key_product_sql__c != null and Id__c != null]; // List<> = new List<>(); for(Opportunity opp : oppList){ List oppLineList = new List(); for(OpportunityLineItem oppItem : oppLItemList){ if(oppItem.OpportunityId == opp.Id){ oppLineList.add(oppItem); } } oppLIteMap.put(opp.Id, oppLineList); } // System.debug('oppLIteMap====ANY o:'+Integer.valueOf(oppLIteMap)); if(quoteList.size() > 0 ){ Date createdDateYear = quoteList[0].CreatedDate.addYears(-1).date(); List raesdList = [select id,product__c,Bollow_Date__c,Rental_Apply__r.Hospital__c,Rental_Apply__r.Strategic_dept__c from Rental_Apply_Equipment_Set_Detail__c where Rental_Apply__r.Strategic_dept__c = :departId and Key_product__c != null and Bollow_Date__c != null and Bollow_Date__c >= :createdDateYear order by Bollow_Date__c ]; for(Opportunity opp : oppList){ List rentList = new List(); for(Rental_Apply_Equipment_Set_Detail__c rentaesds : raesdList){ if(rentaesds.Rental_Apply__r.Strategic_dept__c == opp.Department_Class__c){ rentList.add(rentaesds); } } rentMap.put(opp.Id, rentList); } List updateOppList = new List(); // if(oppLIteMap.size() > 0 && rentMap.size() > 0){ for(Opportunity opp : oppList){ Opportunity o = new Opportunity(); o.Id = opp.Id; o.WhetherTrySpareParts_3m__c = false; o.WhetherTrySpareParts_6m__c = false; o.WhetherTrySpareParts_1y__c = false; for(OpportunityLineItem oppitem : oppLIteMap.get(opp.Id)){ for(Rental_Apply_Equipment_Set_Detail__c rapesd : rentMap.get(opp.Id)){ if(((String)oppitem.Id__c).substring(0,15) == rapesd.product__c){ // Date bollDate = rapesd.Bollow_Date__c; Date createdDateStr = oppQUoteCreateDateMap.get(opp.Id); if(rapesd.Bollow_Date__c != null && rapesd.Bollow_Date__c.addMonths(3) > createdDateStr && rapesd.Bollow_Date__c < createdDateStr){ o.WhetherTrySpareParts_3m__c = true; } if(rapesd.Bollow_Date__c != null && rapesd.Bollow_Date__c.addMonths(6) > createdDateStr && rapesd.Bollow_Date__c.addMonths(3) < createdDateStr){ o.WhetherTrySpareParts_6m__c = true; } if(rapesd.Bollow_Date__c != null && rapesd.Bollow_Date__c.addYears(1) > createdDateStr && rapesd.Bollow_Date__c.addMonths(6) < createdDateStr){ o.WhetherTrySpareParts_1y__c = true; } } } } updateOppList.add(o); } // } // if(updateOppList.size() > 0 ){ Database.SaveResult[] saveResults = Database.update(updateOppList,false); for(Integer i=0;i 60000){ batchIfLog.ErrorLog__c = errorstr.substring(0,60000); }else{ batchIfLog.ErrorLog__c = errorstr.substring(0,errorstr.length()); } if(logstr.length() < 131072){ batchIfLog.Log__c = logstr.substring(0, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072 && logstr.length() < 131072*2){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*2 && logstr.length() < 131072*3){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*3 && logstr.length() < 131072*4){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*4 && logstr.length() < 131072*5){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, 131072*4); batchIfLog.Log5__c = logstr.substring(131072*4, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*5 && logstr.length() < 131072*6){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, 131072*4); batchIfLog.Log5__c = logstr.substring(131072*4, 131072*5); batchIfLog.Log6__c = logstr.substring(131072*5, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*6 && logstr.length() < 131072*7){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, 131072*4); batchIfLog.Log5__c = logstr.substring(131072*4, 131072*5); batchIfLog.Log6__c = logstr.substring(131072*5, 131072*6); batchIfLog.Log7__c = logstr.substring(131072*6, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*7 && logstr.length() < 131072*8){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, 131072*4); batchIfLog.Log5__c = logstr.substring(131072*4, 131072*5); batchIfLog.Log6__c = logstr.substring(131072*5, 131072*6); batchIfLog.Log7__c = logstr.substring(131072*6, 131072*7); batchIfLog.Log8__c = logstr.substring(131072*7, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*8 && logstr.length() < 131072*9){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, 131072*4); batchIfLog.Log5__c = logstr.substring(131072*4, 131072*5); batchIfLog.Log6__c = logstr.substring(131072*5, 131072*6); batchIfLog.Log7__c = logstr.substring(131072*6, 131072*7); batchIfLog.Log8__c = logstr.substring(131072*7, 131072*8); batchIfLog.Log9__c = logstr.substring(131072*8, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*9 && logstr.length() < 131072*10){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, 131072*4); batchIfLog.Log5__c = logstr.substring(131072*4, 131072*5); batchIfLog.Log6__c = logstr.substring(131072*5, 131072*6); batchIfLog.Log7__c = logstr.substring(131072*6, 131072*7); batchIfLog.Log8__c = logstr.substring(131072*7, 131072*8); batchIfLog.Log9__c = logstr.substring(131072*8, 131072*9); batchIfLog.Log10__c = logstr.substring(131072*9, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*10 && logstr.length() < 131072*11){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, 131072*4); batchIfLog.Log5__c = logstr.substring(131072*4, 131072*5); batchIfLog.Log6__c = logstr.substring(131072*5, 131072*6); batchIfLog.Log7__c = logstr.substring(131072*6, 131072*7); batchIfLog.Log8__c = logstr.substring(131072*7, 131072*8); batchIfLog.Log9__c = logstr.substring(131072*8, 131072*9); batchIfLog.Log10__c = logstr.substring(131072*9, 131072*10); batchIfLog.Log11__c = logstr.substring(131072*10, logstr.length()); } if(Test.isRunningTest()){ for(Integer i = 0 ; i < 4096 ; i++){ logstr += '11111111111111111111111111111111'; } } if(logstr.length() > 131072*11 && logstr.length() < 131072*12-5){ batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, 131072*4); batchIfLog.Log5__c = logstr.substring(131072*4, 131072*5); batchIfLog.Log6__c = logstr.substring(131072*5, 131072*6); batchIfLog.Log7__c = logstr.substring(131072*6, 131072*7); batchIfLog.Log8__c = logstr.substring(131072*7, 131072*8); batchIfLog.Log9__c = logstr.substring(131072*8, 131072*9); batchIfLog.Log10__c = logstr.substring(131072*9, 131072*10); batchIfLog.Log11__c = logstr.substring(131072*10, 131072*11); batchIfLog.Log12__c = logstr.substring(131072*11, logstr.length()); } if(logstr.length() > 131072*12-5){ logstr += '...'; batchIfLog.Log__c = logstr.substring(0, 131072); batchIfLog.Log2__c = logstr.substring(131072, 131072*2); batchIfLog.Log3__c = logstr.substring(131072*2, 131072*3); batchIfLog.Log4__c = logstr.substring(131072*3, 131072*4); batchIfLog.Log5__c = logstr.substring(131072*4, 131072*5); batchIfLog.Log6__c = logstr.substring(131072*5, 131072*6); batchIfLog.Log7__c = logstr.substring(131072*6, 131072*7); batchIfLog.Log8__c = logstr.substring(131072*7, 131072*8); batchIfLog.Log9__c = logstr.substring(131072*8, 131072*9); batchIfLog.Log10__c = logstr.substring(131072*9, 131072*10); batchIfLog.Log11__c = logstr.substring(131072*10, 131072*11); batchIfLog.Log12__c = logstr.substring(131072*11, logstr.length()); } insert batchIfLog; } }