global class AgencyQuolifiedExpireBatch implements Database.Batchable { String query; global AgencyQuolifiedExpireBatch() { } global Database.QueryLocator start(Database.BatchableContext BC) { query = 'select id, UnshippedAmount_F__c,Opportunity__c from Statu_Achievements__c where UnshippedAmount_F__c >=1 and Status_2_Formula__c NOT IN (\'无效\', \'冻结\', \'16 已结束\',\'14 已发货\')'; return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, List scope) { List OppIdlist = new List(); List StatuAchievementList = new List(); StatuAchievementList = scope; List OpportunityList = new List(); Map saMap = new Map(); for (Statu_Achievements__c sa : StatuAchievementList) { if(!saMap.containskey(sa.Opportunity__c)){ OppIdlist.add(sa.Opportunity__c); } saMap.put(sa.Opportunity__c, sa); } // CHAN-BEZB4N 20190819 Start System.debug('OppIdlist:::::' + OppIdlist); // String[] stageNames = new String[] {'询价', '取消', '失单'}; String[] stageNames = new String[] {'询价', '取消', '失单', '完毕'}; // CHAN-BEZB4N 20190819 End OpportunityList = [select id, Agency1__r.id, StageName__c,Agency1__r.Name, Sales_assistantWIN_ID__c FROM Opportunity where Id in:OppIdlist and StageName__c NOT IN :stageNames]; System.debug('OpportunityList:::::' + OpportunityList); Map accoppMap = new Map(); Map useroppMap = new Map(); List accIdList = new List(); List userIdList = new List(); for(Opportunity Opp : OpportunityList){ if(!accoppMap.containsKey(Opp.Agency1__r.id)){ accIdList.add(Opp.Agency1__r.id); } accoppMap.put(Opp.Agency1__r.id, Opp); if(!useroppMap.containsKey(Opp.Sales_assistantWIN_ID__c)){ userIdList.add(Opp.Sales_assistantWIN_ID__c); } useroppMap.put(Opp.Sales_assistantWIN_ID__c, Opp); } Map accMap = new Map(); List accList = [select id,Business_Paper_Expiration_Date__c,Tax_Practice_Expiration_Date__c,Medical_Equipment_Expiration_Date__c from Account where id in:accIdList]; for(Account acc : accList){ accMap.put(acc.id, acc); } Map userMap = new Map(); List uList = [select id,IsActive,Email from User where id in:userIdList]; for(User u : uList){ userMap.put(u.id, u); } List OpportunitynewList = new List(); for(Opportunity Opp : OpportunityList){ if(Opp.Agency1__r.id != null){ Account acc = new Account(); acc = accMap.get(Opp.Agency1__r.id); if((acc.Business_Paper_Expiration_Date__c != null && acc.Business_Paper_Expiration_Date__c <= Date.today().addDays(30)) || (acc.Tax_Practice_Expiration_Date__c != null && acc.Tax_Practice_Expiration_Date__c <= Date.today().addDays(30)) || (acc.Medical_Equipment_Expiration_Date__c != null && acc.Medical_Equipment_Expiration_Date__c <= Date.today().addDays(30))){ //过期 if(Opp.Sales_assistantWIN_ID__c != null){ User u = new User(); u = userMap.get(Opp.Sales_assistantWIN_ID__c); if(u!= null && u.IsActive == true){ //无异常 Opp.AgencyQuolified_Flag__c = 10; }else{ //异常 Opp.AgencyQuolified_Flag__c = 20; } }else{ //异常 Opp.AgencyQuolified_Flag__c = 20; } } } OpportunitynewList.add(Opp); } update OpportunitynewList; } global void finish(Database.BatchableContext BC) { // 今回はやることないです } }