global class OCMManagementProvinceBatch implements Database.Batchable { String query; String targetId; private BatchIF_Log__c iflog; private String errStr; private Map mpMap; List oppList = new List(); global OCMManagementProvinceBatch() { iflog = new BatchIF_Log__c(); iflog.Type__c = 'OCMManagementProvinceBatch'; iflog.Is_Error__c = 0; iflog.Log__c = 'OCMManagementProvinceBatch start1\n'; iflog.ErrorLog__c = ''; insert iflog; } global OCMManagementProvinceBatch(String oppId) { targetId = oppId; iflog = new BatchIF_Log__c(); iflog.Type__c = 'OCMManagementProvinceBatch'; iflog.Is_Error__c = 0; iflog.Log__c = 'OCMManagementProvinceBatch start2\n'; iflog.ErrorLog__c = ''; insert iflog; } global OCMManagementProvinceBatch(List oppList) { this.oppList = oppList; iflog = new BatchIF_Log__c(); iflog.Type__c = 'OCMManagementProvinceBatch'; iflog.Is_Error__c = 0; iflog.Log__c = 'OCMManagementProvinceBatch start3\n'; iflog.ErrorLog__c = ''; insert iflog; } global Database.QueryLocator start(Database.BatchableContext BC) { // 只更新询价【状态1】为"询价"和"注残"的 List stageList = new List(); stageList.add('引合'); stageList.add('注残'); //办事处ET/ENG担当共享 you 20230222 只更新“注残”,“出荷”,“完了” stageList.add('出荷'); stageList.add('完了'); // 取得询价对象 //询价:计算到全国的询价助理逻辑修正 DB202312159622 cjw 20231212 start // query = 'select id, Opportunity_Category__c, Owner.Dept__c, Sales_assistant_name_text__c, Account.OCM_Management_Province_HP__c, OCM_man_province__c, OCM_man_province_no_eng__c from Opportunity '; query = 'select id,Ownerid, Opportunity_Category__c, Owner.Dept__c, Sales_assistant_name_text__c, Account.OCM_Management_Province_HP__c, OCM_man_province__c, OCM_man_province_new__c,StageName,SAP_Province__c,Opp_order_Type__c from Opportunity '; //询价:计算到全国的询价助理逻辑修正 DB202312159622 cjw 20231212 end query += ' where StageName = :stageList '; if (targetId != null && targetId != '') { query += ' and id = :targetId '; } if(null!= oppList && oppList.size()>0){ query += ' and Id In :oppList '; } query += ' order by OCM_man_province_new__c'; return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, List oppList) { // 取得OCM管理省信息 List mpList = [select id, Name, GI_assistant__c, SP_assistant__c, Energy_assistant__c,Province__c,ET_DataWindow__c,ET_BusinessWindow__c,ET_Assistant1__c,ET_Assistant2__c,ENG_DataWindow__c,ENG_BusinessWindow__c,ENG_Assistant1__c,ENG_Assistant2__c,ENGShareOpp__c,ETShareOpp__c,ENG_Flag__c,ET_Flag__c from OCM_Management_Province__c]; mpMap = new Map(); Map mpshareoppMap = new Map(); for (OCM_Management_Province__c mp : mpList) { mpMap.put(mp.Name, mp); mpshareoppMap.put(mp.Province__c, mp); } // 判断需要更新的询价 List updList = new List(); for (Opportunity opp : oppList) { //询价:计算到全国的询价助理逻辑修正 DB202312159622 cjw 20231212 start // OCM_Management_Province__c mp = mpMap.get(opp.OCM_man_province_no_eng__c); OCM_Management_Province__c mp = mpMap.get(opp.OCM_man_province_new__c); //询价:计算到全国的询价助理逻辑修正 DB202312159622 cjw 20231212 end Id uid = null; if(opp.StageName == '注残' || opp.StageName == '引合'){ if (opp.OCM_man_province__c == '能量') { uid = mp == null ? null : mp.Energy_assistant__c; } else if (opp.Opportunity_Category__c == 'GI' || opp.Opportunity_Category__c == 'BF' || opp.Opportunity_Category__c == 'ET') { uid = mp == null ? null : mp.GI_assistant__c; } else { uid = mp == null ? null : mp.SP_assistant__c; } // 询价助理是否有变化 if (opp.Sales_assistant_name_text__c != uid) { Opportunity upd = new Opportunity( id = opp.Id, Sales_assistant_name_text__c = uid ); updList.add(upd); } } } // 询价更新 if (updList.size() > 0) { Database.SaveResult[] lsr = Database.update(updList, false); for (Integer tIdx = 0; tIdx < lsr.size(); tIdx++) { Database.SaveResult sr = lsr[tIdx]; if (!sr.isSuccess()) { Database.Error emsg = sr.getErrors()[0]; System.debug('=====Error Opp: ' + updList[tIdx].Id + ' msg: ' + emsg); } } } //询价共享 根据 省和耗材分类 //删掉原来的ET/ENG担当,插入新的担当 Map otmMap = new Map(); //新增的询价共享 List addoppsharlist =new List(); //需要删除的原担当的共享 List deleteoppsharlist =new List(); Set mpset = new Set(); //询价对应省 如贵州 用来限制TMS和IMS得查询数据量(因为处理ims数据时超50001) for (Opportunity opp : oppList) { if(opp.StageName == '注残' || opp.StageName == '出荷'|| opp.StageName == '完了'){ if(null!=opp.Opp_order_Type__c && ''!=opp.Opp_order_Type__c){ otmMap.put(opp.Id,opp); //oppid 担当id mpset.add(opp.OCM_man_province_new__c); } } } if(!otmMap.isEmpty()){ // 手动共享不能删除原来已经存在的共享 List osList = [select id,UserOrGroupId,OpportunityId from OpportunityShare where OpportunityId in :otmMap.keySet() and OpportunityAccessLevel = 'read' and rowCause = 'Manual']; Map> allmap = new Map>(); for(OpportunityShare oppshare : osList){ list allFSEUserIDList = new list(); if(otmMap.containsKey(oppshare.OpportunityId)){ OCM_Management_Province__c mpshareopp = mpshareoppMap.get(otmMap.get(oppshare.OpportunityId).SAP_Province__c); if(otmMap.get(oppshare.OpportunityId).Opp_order_Type__c=='ET'){ if(null!=mpshareopp && null!=mpshareopp.ETShareOpp__c && mpshareopp.ET_Flag__c==true){ String[] etnames = mpshareopp.ETShareOpp__c.split(','); for(String etname : etnames) { if (String.isNotBlank(etname)) { allFSEUserIDList.add(etname);//需要删掉的et用户id } } } }else{ if(null!=mpshareopp && null!=mpshareopp.ENGShareOpp__c && mpshareopp.ENG_Flag__c==true){ String[] engnames = mpshareopp.ENGShareOpp__c.split(','); for(String engname : engnames) { if (String.isNotBlank(engname)) { allFSEUserIDList.add(engname);//需要删掉的eng用户id } } } } } allmap.put(oppshare.OpportunityId,allFSEUserIDList); } //List oppsharlist =new List(); Map oppsharlist =new Map(); system.debug('====opp==='+otmMap.size()); for(Id oppid:otmMap.keySet()){ Opportunity oppobj=otmMap.get(oppid);//获得当前对象 if (mpshareoppMap.containsKey(oppobj.SAP_Province__c)) { OCM_Management_Province__c mpshareopp = mpshareoppMap.get(oppobj.SAP_Province__c); if(null!=oppobj.Opp_order_Type__c && ''!= oppobj.Opp_order_Type__c){ //String aa='005C8000000219sIAA,00GC80000001UR7MAM,00GC80000000ujBMAQ,00GC80000002F7pMAE,00GC80000000uj8MAA,00GC80000001USsMAM,00GC80000000v68MAA,00GC80000000ujKMAQ,00GC80000000upQMAQ'; if(oppobj.Opp_order_Type__c=='ET'){ if(mpshareopp.ET_Flag__c==true || System.Label.OCMManagementProvinceBatchFlag == '0'){ if(null!=mpshareopp && null!=mpshareopp.ET_DataWindow__c && !''.equals(mpshareopp.ET_DataWindow__c) && oppobj.Ownerid !=mpshareopp.ET_DataWindow__c){ OpportunityShare oppshare = new OpportunityShare( OpportunityId = oppid, UserOrGroupId = mpshareopp.ET_DataWindow__c, RowCause = 'Manual', OpportunityAccessLevel = 'read'); //oppsharlist.add(oppshare); String key = oppid +'-' + mpshareopp.ET_DataWindow__c; oppsharlist.put(key,oppshare); } if(null!=mpshareopp && null!=mpshareopp.ET_BusinessWindow__c && !''.equals(mpshareopp.ET_BusinessWindow__c) && oppobj.Ownerid !=mpshareopp.ET_BusinessWindow__c){ OpportunityShare oppshare = new OpportunityShare( OpportunityId = oppid, UserOrGroupId = mpshareopp.ET_BusinessWindow__c, RowCause = 'Manual', OpportunityAccessLevel = 'read'); //oppsharlist.add(oppshare); String key = oppid +'-' + mpshareopp.ET_BusinessWindow__c; oppsharlist.put(key,oppshare); } if(null!=mpshareopp && null!=mpshareopp.ET_Assistant1__c && !''.equals(mpshareopp.ET_Assistant1__c) && oppobj.Ownerid !=mpshareopp.ET_Assistant1__c){ OpportunityShare oppshare = new OpportunityShare( OpportunityId = oppid, UserOrGroupId = mpshareopp.ET_Assistant1__c, RowCause = 'Manual', OpportunityAccessLevel = 'read'); //oppsharlist.add(oppshare); String key = oppid +'-' + mpshareopp.ET_Assistant1__c; oppsharlist.put(key,oppshare); } if(null!=mpshareopp && null!=mpshareopp.ET_Assistant2__c && !''.equals(mpshareopp.ET_Assistant2__c) && oppobj.Ownerid !=mpshareopp.ET_Assistant2__c){ OpportunityShare oppshare = new OpportunityShare( OpportunityId = oppid, UserOrGroupId = mpshareopp.ET_Assistant2__c, RowCause = 'Manual', OpportunityAccessLevel = 'read'); //oppsharlist.add(oppshare); String key = oppid +'-' + mpshareopp.ET_Assistant2__c; oppsharlist.put(key,oppshare); } system.debug('ET==='+oppsharlist); } }else{//SP,ENG if(mpshareopp.ENG_Flag__c==true || System.Label.OCMManagementProvinceBatchFlag == '0'){ if(null!=mpshareopp && null!=mpshareopp.ENG_DataWindow__c && !''.equals(mpshareopp.ENG_DataWindow__c) && oppobj.Ownerid !=mpshareopp.ENG_DataWindow__c){ OpportunityShare oppshare = new OpportunityShare( OpportunityId = oppid, UserOrGroupId = mpshareopp.ENG_DataWindow__c, RowCause = 'Manual', OpportunityAccessLevel = 'read'); //oppsharlist.add(oppshare); String key = oppid +'-' + mpshareopp.ENG_DataWindow__c; oppsharlist.put(key,oppshare); } if(null!=mpshareopp && null!=mpshareopp.ENG_BusinessWindow__c && !''.equals(mpshareopp.ENG_BusinessWindow__c) && oppobj.Ownerid !=mpshareopp.ENG_BusinessWindow__c){ OpportunityShare oppshare = new OpportunityShare( OpportunityId = oppid, UserOrGroupId = mpshareopp.ENG_BusinessWindow__c, RowCause = 'Manual', OpportunityAccessLevel = 'read'); //oppsharlist.add(oppshare); String key = oppid +'-' + mpshareopp.ENG_BusinessWindow__c; oppsharlist.put(key,oppshare); } if(null!=mpshareopp && null!=mpshareopp.ENG_Assistant1__c && !''.equals(mpshareopp.ENG_Assistant1__c) && oppobj.Ownerid !=mpshareopp.ENG_Assistant1__c){ OpportunityShare oppshare = new OpportunityShare( OpportunityId = oppid, UserOrGroupId = mpshareopp.ENG_Assistant1__c, RowCause = 'Manual', OpportunityAccessLevel = 'read'); //oppsharlist.add(oppshare); String key = oppid +'-' + mpshareopp.ENG_Assistant1__c; oppsharlist.put(key,oppshare); } if(null!=mpshareopp && null!=mpshareopp.ENG_Assistant2__c && !''.equals(mpshareopp.ENG_Assistant2__c) && oppobj.Ownerid !=mpshareopp.ENG_Assistant2__c){ OpportunityShare oppshare = new OpportunityShare( OpportunityId = oppid, UserOrGroupId = mpshareopp.ENG_Assistant2__c, RowCause = 'Manual', OpportunityAccessLevel = 'read'); //oppsharlist.add(oppshare); String key = oppid +'-' + mpshareopp.ENG_Assistant2__c; oppsharlist.put(key,oppshare); } system.debug('SP==='+oppsharlist); } } } } } List DeshList = new List(); for ( Opportunityshare ops : osList) { if (allmap.containsKey(ops.OpportunityId)&& allmap.get(ops.OpportunityId).contains(ops.UserOrGroupId)) { DeshList.add(ops); } } //询价共享先注释 // try{ // if (DeshList.size() > 0) delete DeshList; // system.debug('插入的共享==='+oppsharlist.size()+'=========='+oppsharlist); // if(null!=oppsharlist && oppsharlist.size()>0){ // //insert oppsharlist; // insert oppsharlist.values(); // } // }catch(Exception e){ // errStr = e.getMessage()+'\n'; // errStr += '询价插入的共享==='+oppsharlist.size()+oppsharlist+'\n'; // errStr += '需要删除的共享==='+DeshList.size()+'\n'+DeshList+'\n'; // errStr += e.getLineNumber()+'\n'; // } } system.debug('省份信息'+mpset); } global void finish(Database.BatchableContext BC) { String tmp = ''; if (String.isNotBlank(errStr)) { tmp = errStr; } iflog.Log__c += 'OCMManagementProvinceBatch finish()\n'; iflog.Log__c += '\n OCMManagementProvinceBatch end'; tmp += iflog.ErrorLog__c; if (tmp.length() > 60000) { tmp = tmp.substring(0, 60000); tmp += ' ...have more lines...'; iflog.ErrorLog__c = tmp; } String tmp2 = iflog.Log__c; if (tmp2.length() > 60000) { tmp2 = tmp2.substring(0, 60000); tmp2 += ' ...have more lines...'; iflog.Log__c = tmp2; } update iflog; if(null!=mpMap && System.Label.OCMManagementProvinceBatchFlag == '1'){ Database.executeBatch(new OCMTOTMSShareUserBatch(mpMap),200); } } }