public with sharing class ConsumableTargetManageHandler extends Oly_TriggerHandler { private Map newMap; private Map oldMap; private List newList; private List oldList; public ConsumableTargetManageHandler() { this.newMap = (Map) Trigger.newMap; this.oldMap = (Map) Trigger.oldMap; this.newList = (List) Trigger.new; this.oldList = (List) Trigger.old; } protected override void beforeInsert(){ createdConsumableTargetManage(); } protected override void afterInsert(){ HospitalToIMSUser(); OCSMToTMSUser(); // you 20240307 为IMS添加办事处中ET,ENG担当的查看权限 } protected override void afterUpdate(){ OCSMToTMSUser(); } //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 start protected override void beforeUpdate(){ createdConsumableTargetManage(); HospitalToIMSUser(); } //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 end private void createdConsumableTargetManage(){ //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 start // if(trigger.isInsert){ if(trigger.isInsert||trigger.isUpdate){ //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 end List hospit = new List(); for(ConsumableTargetManage__c ctm : newList){ hospit.add(ctm.Hospital__c); } List hospital = [select Id,ET_owner__c,ET_Product_Leader__c from Account where Id in:hospit]; Map hospitalMap = new Map(); if(hospital.size()>0){ for(Account account : hospital){ hospitalMap.put(account.Id,account); } } for(ConsumableTargetManage__c ctm : newList){ //将ET主担当赋给所有人,并给担当添加共享,只有ET修改所有人 if(hospitalMap.containsKey(ctm.Hospital__c) && hospitalMap.get(ctm.Hospital__c) != null){ //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 start if(ctm.OwnerId != hospitalMap.get(ctm.Hospital__c).ET_owner__c){ if(ctm.productType__c == 'ET耗材'){ //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 end ctm.OwnerId = hospitalMap.get(ctm.Hospital__c).ET_owner__c; //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 start } } //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 end } } } } private void HospitalToIMSUser(){ //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 start // if(trigger.isInsert){ System.debug('test>>'); if(trigger.isInsert||trigger.isUpdate){ //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 end List hospit = new List(); List cbtmit = new List(); for(ConsumableTargetManage__c ctm : newList){ hospit.add(ctm.Hospital__c); cbtmit.add(ctm.Id); } //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 start // List hospital = [select Id,ET_owner__c,ET_Product_Leader__c from Account where Id in:hospit]; List hospital = [select Id,ET_owner__c,ET_Product_Leader__c,Energy_LeaderStr__c from Account where Id in:hospit]; //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 end Map hospitalMap = new Map(); Map product_leaders = new Map(); if(hospital.size()>0){ for(Account account : hospital){ hospitalMap.put(account.Id,account); if (String.isNotBlank(account.ET_Product_Leader__c)) { String[] names = account.ET_Product_Leader__c.split(','); for(String name : names) { if (String.isNotBlank(name)) { product_leaders.put(name, null); } } } //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 start if (String.isNotBlank(account.Energy_LeaderStr__c)) { String[] names = account.Energy_LeaderStr__c.split(','); for(String name : names) { if (String.isNotBlank(name)) { product_leaders.put(name, null); } } } //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 end System.debug('Energy_LeaderStr__c>>'+account.Energy_LeaderStr__c); System.debug('ET_Product_Leader__c>>'+account.ET_Product_Leader__c); } } // 获得担当 //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 start Map product_leaderMap = new Map(); //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 end if (product_leaders.size() > 0) { List lstUsers = [select Id, Alias from User where Alias in :product_leaders.keySet() and IsActive = true]; for (User user : lstUsers) { product_leaders.put(user.Alias, user.Id); //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 start product_leaderMap.put(user.Id,user); //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 end } } System.debug('product_leaders>>'+product_leaders); // 权限类型 List rowCauseList = new List(); String rowCauseEdit = Schema.ConsumableTargetManage__Share.RowCause.HospitalToIMSUser__c; rowCauseList.add(rowCauseEdit); // 清理共享 //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 start // List delShares = [select Id from ConsumableTargetManage__Share where ParentId in :cbtmit and RowCause in :rowCauseList]; List delShares = [select Id,UserOrGroup.Name,ParentId,Parent.productType__c from ConsumableTargetManage__Share where ParentId in :cbtmit and RowCause in :rowCauseList]; Set notdelShares = new Set(); //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 end if (delShares != null && delShares.size() > 0) { System.debug('delShares>>'+delShares); //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 start Set shareId= new Set(); List delShares2 = new List(); for (ConsumableTargetManage__Share sharevalue : delShares) { if(sharevalue.Parent.productType__c == '外科耗材'){ String Energy_LeaderStr = hospitalMap.get(newMap.get(sharevalue.ParentId).Hospital__c).Energy_LeaderStr__c; if(String.isBlank(Energy_LeaderStr) ||(String.isNotBlank(Energy_LeaderStr) && !(Energy_LeaderStr.contains(sharevalue.UserOrGroup.Name)))){ shareId.add(sharevalue.ParentId); } }else{ String ET_Product_Leader = hospitalMap.get(newMap.get(sharevalue.ParentId).Hospital__c).ET_Product_Leader__c; if(String.isBlank(ET_Product_Leader) ||(String.isNotBlank(ET_Product_Leader) && !(ET_Product_Leader.contains(sharevalue.UserOrGroup.Name)))){ shareId.add(sharevalue.ParentId); } } } for (ConsumableTargetManage__Share sharevalue2 : delShares) { if(shareId.contains(sharevalue2.ParentId)){ delShares2.add(sharevalue2); }else{ notdelShares.add(sharevalue2.ParentId); } } System.debug('delShares2>>'+delShares2); if(delShares2 != null && delShares2.size() > 0){ delete delShares2; } // delete delShares; //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 end } List addShares = new List(); for(ConsumableTargetManage__c ctm : newList){ //将ET主担当赋给所有人,并给担当添加共享 //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 start if(!notdelShares.contains(ctm.Id)){ //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 end if(hospitalMap.containsKey(ctm.Hospital__c) && hospitalMap.get(ctm.Hospital__c) != null){ Account hospitalvalue = hospitalMap.get(ctm.Hospital__c); System.debug('hospitalvalue>>'+hospitalvalue); //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 start if(ctm.productType__c == '外科耗材'){ if (String.isNotBlank(hospitalvalue.Energy_LeaderStr__c)) { String[] users = hospitalvalue.Energy_LeaderStr__c.split(','); for (String user : users) { if (product_leaders.get(user) != null) { addShares.add(new ConsumableTargetManage__Share(ParentId = ctm.Id, RowCause = rowCauseEdit, UserOrGroupId = product_leaders.get(user), AccessLevel = 'Edit')); } } } }else{ //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 end if (String.isNotBlank(hospitalvalue.ET_Product_Leader__c)) { String[] users = hospitalvalue.ET_Product_Leader__c.split(','); System.debug('users>>'+users); for (String user : users) { if (product_leaders.get(user) != null) { addShares.add(new ConsumableTargetManage__Share(ParentId = ctm.Id, RowCause = rowCauseEdit, UserOrGroupId = product_leaders.get(user), AccessLevel = 'Edit')); } } } //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 start } System.debug('ctm>>'+ctm); System.debug('addShares>>'+addShares); //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 end } //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 start } //DB202312611748 【IMS/TMS】IMS管理表--耗材管理工具 end } if (addShares.size() > 0) { insert addShares; } } } private void OCSMToTMSUser(){ Set IMSPros = new Set(); String rowCause = Schema.ConsumableTargetManage__Share.RowCause.OCSMToIMSUser__c; List mpList = new List(); Map mpMap = new Map(); List imssharlist =new List(); List deletetemsharlist = new List(); for (ConsumableTargetManage__c newims : newList) { if (Trigger.isInsert || (Trigger.isUpdate && newims.productType__c != oldMap.get(newims.Id).productType__c)) { IMSPros.add(newims.H_OCM_man_province_HP__c); } } if(null !=IMSPros && IMSPros.size()>0){ mpList = [select id,Name,ET_DataWindow__c,ET_BusinessWindow__c,ET_Assistant1__c,ET_Assistant2__c,ENG_DataWindow__c,ENG_BusinessWindow__c,ENG_Assistant1__c,ENG_Assistant2__c from OCM_Management_Province__c where Name in: IMSPros]; for (OCM_Management_Province__c mp: mpList){ mpMap.put(mp.Name, mp); } } if(null!=mpMap){ for (ConsumableTargetManage__c nObj : newList) { if (mpMap.containsKey(nObj.H_OCM_man_province_HP__c)) { if(null!=nObj.productType__c && ''!= nObj.productType__c && null!=mpMap.get(nObj.H_OCM_man_province_HP__c)){ if(nObj.productType__c=='ET耗材'){ if(null!=mpMap.get(nObj.H_OCM_man_province_HP__c).ET_DataWindow__c && !''.equals(mpMap.get(nObj.H_OCM_man_province_HP__c).ET_DataWindow__c) && nObj.Ownerid !=mpMap.get(nObj.H_OCM_man_province_HP__c).ET_DataWindow__c){ ConsumableTargetManage__Share tmsshare = new ConsumableTargetManage__Share( ParentId = nObj.Id, RowCause = rowCause, UserOrGroupId = mpMap.get(nObj.H_OCM_man_province_HP__c).ET_DataWindow__c, AccessLevel = 'read'); imssharlist.add(tmsshare); } if(null!=mpMap.get(nObj.H_OCM_man_province_HP__c).ET_BusinessWindow__c && !''.equals(mpMap.get(nObj.H_OCM_man_province_HP__c).ET_BusinessWindow__c) && nObj.Ownerid !=mpMap.get(nObj.H_OCM_man_province_HP__c).ET_BusinessWindow__c){ ConsumableTargetManage__Share tmsshare = new ConsumableTargetManage__Share( ParentId = nObj.Id, RowCause = rowCause, UserOrGroupId = mpMap.get(nObj.H_OCM_man_province_HP__c).ET_BusinessWindow__c, AccessLevel = 'read'); imssharlist.add(tmsshare); } if(null!=mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Assistant1__c && !''.equals(mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Assistant1__c) && nObj.Ownerid !=mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Assistant1__c){ ConsumableTargetManage__Share tmsshare = new ConsumableTargetManage__Share( ParentId = nObj.Id, RowCause = rowCause, UserOrGroupId = mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Assistant1__c, AccessLevel = 'read'); imssharlist.add(tmsshare); } if(null!=mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Assistant2__c && !''.equals(mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Assistant2__c) && nObj.Ownerid !=mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Assistant2__c){ ConsumableTargetManage__Share tmsshare = new ConsumableTargetManage__Share( ParentId = nObj.Id, RowCause = rowCause, UserOrGroupId = mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Assistant2__c, AccessLevel = 'read'); imssharlist.add(tmsshare); } }else{//ENG if(null!=mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_DataWindow__c && !''.equals(mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_DataWindow__c) && nObj.Ownerid !=mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_DataWindow__c){ ConsumableTargetManage__Share tmsshare = new ConsumableTargetManage__Share( ParentId = nObj.Id, RowCause = rowCause, UserOrGroupId = mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_DataWindow__c, AccessLevel = 'read'); imssharlist.add(tmsshare); } if(null!=mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_BusinessWindow__c && !''.equals(mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_BusinessWindow__c) && nObj.Ownerid !=mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_BusinessWindow__c){ ConsumableTargetManage__Share tmsshare = new ConsumableTargetManage__Share( ParentId = nObj.Id, RowCause = rowCause, UserOrGroupId = mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_BusinessWindow__c, AccessLevel = 'read'); imssharlist.add(tmsshare); } if(null!=mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Assistant1__c && !''.equals(mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Assistant1__c) && nObj.Ownerid !=mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Assistant1__c){ ConsumableTargetManage__Share tmsshare = new ConsumableTargetManage__Share( ParentId = nObj.Id, RowCause = rowCause, UserOrGroupId = mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Assistant1__c, AccessLevel = 'read'); imssharlist.add(tmsshare); } if(null!=mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Assistant2__c && !''.equals(mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Assistant2__c) && nObj.Ownerid !=mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Assistant2__c){ ConsumableTargetManage__Share tmsshare = new ConsumableTargetManage__Share( ParentId = nObj.Id, RowCause = rowCause, UserOrGroupId = mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Assistant2__c, AccessLevel = 'read'); imssharlist.add(tmsshare); } } deletetemsharlist.add(nObj.Id); } } } } // 先 Delete 后 Insert if (deletetemsharlist.size() > 0) { List deleteList = [SELECT Id FROM ConsumableTargetManage__Share WHERE RowCause = :rowCause AND ParentId IN :deletetemsharlist ]; delete deleteList; } if(null!=imssharlist){ insert imssharlist; } } }