global class InquiryVerifyBatch implements Database.Batchable, Database.Stateful { public String query; public Date start_date; public Date end_date; global InquiryVerifyBatch() { // if(Test.isRunningTest()){ this.query = 'select id,quoteSavedDate__c,Opportunity.Id,Opportunity.Department_Class__c from quote where Quote_No_last2__c = \'01\' and CreatedDate = today'; // }else{ // this.query = 'select id,quoteSavedDate__c,Opportunity.Id,Opportunity.Department_Class__c from quote where Quote_No__c like \'%01\' and CreatedDate = today'; // } } global InquiryVerifyBatch(Integer year, Integer month) { if (year == null) { year = 2021; } if (month == null) { month = 4; } start_date = Date.newInstance(year, month, 1); end_date = start_date.addMonths(1); this.query = 'select id,quoteSavedDate__c,Opportunity.Id,Opportunity.Department_Class__c from quote where Quote_No_last2__c = \'01\' and CreatedDate >= :start_date and CreatedDate < :end_date'; } // global void execute(SchedulableContext sc){Database.executebatch(this);} global Database.QueryLocator start(Database.BatchableContext bc) { // 获取报价单数据 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 limit 200]; 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 Rental_Apply__r.Demo_purpose2__c = '试用(无询价)' and Bollow_Date__c >= :createdDateYear order by Bollow_Date__c limit 200 ]; 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) { } }