global class InquiryVerifyBatch implements Schedulable,Database.Batchable,Database.Stateful { public String query; public Date start_date; public Integer year; public Integer month; global InquiryVerifyBatch() { this.query = query; } global InquiryVerifyBatch(Integer year, Integer month) { if (year == null) { this.year = 2021; } if (month == null) { this.month = 4; } start_date = Date.newInstance(year, month, 1); this.query = query; } public void execute(SchedulableContext sc) { Database.executeBatch(this); } global Database.QueryLocator start(Database.BatchableContext bc) { // 获取报价单数据 if (start_date!=null) { query = 'select id,quoteSavedDate__c,Opportunity.Id,Opportunity.Department_Class__c from quote where Quote_No_last2__c = \'01\' and CreatedDate >= :start_date'; }else{ query = 'select id,quoteSavedDate__c,Opportunity.Id,Opportunity.Department_Class__c from quote where Quote_No_last2__c = \'01\' and CreatedDate = today'; } System.debug(LoggingLevel.INFO, '*** query: ' + query); return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, list quotes) { List os = new List(); List qids = new List(); List oppDepartmentList = new List(); List ca4 = new List(); for (quote quo : quotes) { qids.add(quo.id); oppDepartmentList.add(quo.Opportunity.Department_Class__c); } Map> mapc4 = new Map>(); for(List qlt:[Select Id,Product2.Category4__c,QuoteId from QuoteLineItem where QuoteId In :qids and Product2.Important_product__c = true]){ for ( QuoteLineItem qlt1:qlt ) { ca4.add(qlt1.Product2.Category4__c); } if (!mapc4.containskey(qlt[0].QuoteId)) { mapc4.put(qlt[0].QuoteId,ca4); } } List raesdList = [select id, product__c, Bollow_Date__c,Category4__c, Rental_Apply__r.Hospital__c,Rental_Apply__r.Strategic_dept__c from Rental_Apply_Equipment_Set_Detail__c where Rental_Apply__r.Demo_purpose2__c = '试用(无询价)' AND Rental_Apply__r.Strategic_dept__c IN : oppDepartmentList and Category4__c IN :ca4 order by Bollow_Date__c]; // 遍历报价单 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(); } // 一年前的日期 Date createdDateYear = createdDateStr.addYears(-1); for (Rental_Apply_Equipment_Set_Detail__c raesd : raesdList) { if (raesd.Rental_Apply__r.Strategic_dept__c == quo.Opportunity.Department_Class__c && mapc4.containskey(quo.id) && mapc4.get(quo.id).contains(raesd.Category4__c) && raesd.Bollow_Date__c >= createdDateYear) { 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) { Oly_TriggerHandler.bypass('AWSServiceTool2'); Oly_TriggerHandler.bypass('PIHelper'); update os; system.debug('执行成功'); }else{ system.debug('执行失败'); } } global void finish(Database.BatchableContext BC) { } }