global class InquiryVerifyBatch implements Schedulable, Database.Batchable, Database.Stateful { public String query; global InquiryVerifyBatch() { } global void execute(SchedulableContext sc){Database.executebatch(this);} global Database.QueryLocator start(Database.BatchableContext bc) { String quoteLN = '%01'; // 获取报价单数据 query = 'select id,quoteSavedDate__c,Opportunity.Id,Opportunity.Department_Class__c from quote where Quote_No__c like :quoteLN and CreatedDate = today'; return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, list quotes) { List os = new List(); // 遍历报价单 for (quote quo: quotes) { Opportunity o = New Opportunity(); o = quo.opportunity; Date createdDateStr ; // 提出报价单生成当日时间 if (quo.quoteSavedDate__c!=null){ createdDateStr = quo.quoteSavedDate__c; }else{ createdDateStr = Date.today(); } // 获取报价产品数据,获取第四分类 List qlts = [Select Id,Product2.Category4__c from QuoteLineItem where QuoteId = :quo.Id]; List c4 = new List(); List qdept = new List(); // 第四分类放入list for (QuoteLineItem qlt : qlts) { c4.add(qlt.Product2.Category4__c); } // 一年前的日期 Date createdDateYear = createdDateStr.addYears(-1); // 获取备品配套一览明细 List raesdList = [select id, product__c, Bollow_Date__c,Category4__c, Rental_Apply__r.Hospital__c from Rental_Apply_Equipment_Set_Detail__c where Rental_Apply__r.Strategic_dept__c = : quo.Opportunity.Department_Class__c and Category4__c IN :c4 and Key_product__c != null and Rental_Apply__r.Demo_purpose2__c = '试用(无询价)' and Bollow_Date__c >= :createdDateYear order by Bollow_Date__c ]; for (Rental_Apply_Equipment_Set_Detail__c raesd : raesdList) { o.WhetherTrySpareParts_3m__c = false; o.WhetherTrySpareParts_6m__c = false; o.WhetherTrySpareParts_1y__c = false; Date bollDate = raesd.Bollow_Date__c; if (bollDate != null && bollDate.addMonths(3) > createdDateStr) { o.WhetherTrySpareParts_3m__c = true; } if (bollDate != null && bollDate.addMonths(6) > createdDateStr && bollDate.addMonths(3) < createdDateStr) { o.WhetherTrySpareParts_6m__c = true; } if (bollDate != null && bollDate.addYears(1) > createdDateStr && bollDate.addMonths(6) < createdDateStr) { o.WhetherTrySpareParts_1y__c = true; } } os.add(o); } if (os.size()>0) { update os; system.debug('执行成功'); }else{ system.debug('执行失败'); } } global void finish(Database.BatchableContext BC) { } }