global class SortUpdateOpp2Batch implements Database.Batchable , Database.Stateful{ private final List sdcName = null; private BatchIF_Log__c iflog; global SortUpdateOpp2Batch(){ } global SortUpdateOpp2Batch(List str){ sdcName = str; } global Database.QueryLocator start(Database.BatchableContext BC){ //20230724 lt 添加邮件提醒 start system.debug('执行start'); iflog = new BatchIF_Log__c(); iflog.Type__c = 'SortUpdateOpp2Batch'; iflog.Log__c = 'SortUpdateOpp2Batch start\n'; iflog.ErrorLog__c = ''; insert iflog; //20230724 lt 添加邮件提醒 end String sql = 'Select id,Name,type__c From opp2AuxiliarySort__c '; if(sdcName <> null){ sql += 'Where Name in :sdcName'; } sql += ' order by type__c'; System.debug('=sql='+sql); return Database.getQueryLocator(sql); } global void execute(Database.BatchableContext BC, List opp2AuxiliarySortList){ try{ if(opp2AuxiliarySortList.size()>0){ List GIcheckList = new List(); List SPcheckList = new List(); String sql = opp2SQLHead('GI'); String sql2 = opp2SQLHead('SP'); if(opp2AuxiliarySortList[0].type__c == 1){ sql +='and Opportunity__r.OCM_man_province__c = \''+opp2AuxiliarySortList[0].Name +'\''; sql +=' Order by Opportunity__r.Amount_Without_Tax_Thousand_F__c Desc Limit 100'; GIcheckList = Database.query(sql); Integer GInum = 0; for (Opportunity2__c GIoppObj : GIcheckList) { GInum++; GIoppObj.RankNum_State__c = GInum; } sql2 +='and Opportunity__r.OCM_man_province__c = \''+opp2AuxiliarySortList[0].Name +'\''; sql2 +=' Order by Opportunity__r.Amount_Without_Tax_Thousand_F__c Desc Limit 100'; SPcheckList = Database.query(sql2); Integer SPnum = 0; for (Opportunity2__c SPoppObj : SPcheckList) { SPnum++; SPoppObj.RankNum_State__c = SPnum; } }else if(opp2AuxiliarySortList[0].type__c == 2){ sql +='and Opportunity__r.SalesdepartmentForecast__c = \''+opp2AuxiliarySortList[0].Name +'\''; sql +=' Order by Opportunity__r.Amount_Without_Tax_Thousand_F__c Desc Limit 100'; GIcheckList = Database.query(sql); Integer GInum = 0; for (Opportunity2__c GIoppObj : GIcheckList) { GInum++; GIoppObj.RankNum_Dept__c = GInum; } sql2 +='and Opportunity__r.SalesdepartmentForecast__c = \''+opp2AuxiliarySortList[0].Name +'\''; sql2 +=' Order by Opportunity__r.Amount_Without_Tax_Thousand_F__c Desc Limit 100'; SPcheckList = Database.query(sql2); Integer SPnum = 0; for (Opportunity2__c SPoppObj : SPcheckList) { SPnum++; SPoppObj.RankNum_Dept__c = SPnum; } }else if(opp2AuxiliarySortList[0].type__c == 3){ sql +='and Opportunity__r.SalesdepartmentForecast__c != \'市场\' and Opportunity__r.SalesdepartmentForecast__c != \'其他\' and Opportunity__r.SalesdepartmentForecast__c != \'7.能量\' and Opportunity__r.SalesdepartmentForecast__c != \'外科\' and Opportunity__r.SalesdepartmentForecast__c != \'经销商\' '; sql +=' Order by Opportunity__r.Amount_Without_Tax_Thousand_F__c Desc Limit 100'; GIcheckList = Database.query(sql); Integer GInum = 0; for (Opportunity2__c GIoppObj : GIcheckList) { GInum++; GIoppObj.RankNum_Country__c = GInum; } sql2 +='and Opportunity__r.SalesdepartmentForecast__c != \'市场\' and Opportunity__r.SalesdepartmentForecast__c != \'其他\' and Opportunity__r.SalesdepartmentForecast__c != \'7.能量\' and Opportunity__r.SalesdepartmentForecast__c != \'外科\' and Opportunity__r.SalesdepartmentForecast__c != \'经销商\' '; sql2 +=' Order by Opportunity__r.Amount_Without_Tax_Thousand_F__c Desc Limit 100'; SPcheckList = Database.query(sql2); Integer SPnum = 0; for (Opportunity2__c SPoppObj : SPcheckList) { SPnum++; SPoppObj.RankNum_Country__c = SPnum; } } Database.SaveResult[] saveTenderResults = Database.update(GIcheckList, false); Database.SaveResult[] saveTenderResults2 = Database.update(SPcheckList, false); } }catch(Exception ex){ iflog.ErrorLog__c = ex.getLineNumber()+' 行错误 : '+ex.getMessage(); return; } } global void finish(Database.BatchableContext BC){ //20230724 lt 添加邮件提醒 start iflog.Log__c += '\nSortUpdateOpp2Batch end'; String tmp = iflog.ErrorLog__c; if (tmp.length() > 65000) { tmp = tmp.substring(0, 65000); tmp += ' ...have more lines...'; iflog.ErrorLog__c = tmp; } update iflog; //20230724 lt 添加邮件提醒 end } public String opp2SQLHead (String Type){ String sql = 'Select id,name, StageName__c,Opportunity__r.Product_Sales_Category__c,' +'Opportunity__r.Amount_Without_Tax_Thousand_F__c,' +'Opportunity__r.OCM_man_province__c,Opportunity__r.SalesdepartmentForecast__c,' +'RankNum_State__c,RankNum_Dept__c,RankNum_Country__c ' +'From Opportunity2__c ' +'where StageName__c = \'询价\' ' +'and Opportunity__r.Amount_Without_Tax_Thousand_F__c != null '; if(Type == 'GI'){ sql +='and Opportunity__r.Product_Sales_Category__c = \'GI\' '; }else if(Type == 'SP'){ sql +='and Opportunity__r.Product_Sales_Category__c = \'SP\' '; } return sql; } }