public without sharing class UpdateContractAimAmountHandler extends Oly_TriggerHandler { 
 | 
    private Map<Id, Account> newMap; 
 | 
    private Map<Id, Account> oldMap; 
 | 
    private List<Account> newList; 
 | 
    private List<Account> oldList; 
 | 
  
 | 
    public UpdateContractAimAmountHandler() { 
 | 
        this.newMap = (Map<Id, Account>) Trigger.newMap; 
 | 
        this.oldMap = (Map<Id, Account>) Trigger.oldMap; 
 | 
        this.newList = (List<Account>) Trigger.new; 
 | 
        this.oldList = (List<Account>) Trigger.old; 
 | 
    } 
 | 
    protected override void beforeUpdate() { 
 | 
        changeAssume(); 
 | 
    } 
 | 
  
 | 
    protected override void afterInsert() { 
 | 
        createAgencyTarget(); 
 | 
        SetAwaitToSendAWS(); 
 | 
  
 | 
    } 
 | 
  
 | 
    protected override void afterUpdate() { 
 | 
        createAgencyTarget(); 
 | 
        // LHJ KWAG-BQMA89 202006 Start 
 | 
        updateAgencyAccout(); 
 | 
        // LHJ KWAG-BQMA89 202006 End 
 | 
         
 | 
        SetAwaitToSendAWS(); 
 | 
    } 
 | 
     
 | 
  
 | 
    private void createAgencyTarget() { 
 | 
        //  LD 20200807 优化account record type ID 读取方法 Start 
 | 
        //新逻辑 
 | 
        Id rtId = '012100000006KW8AAM'; 
 | 
        // 原逻辑 
 | 
        // Id rtId = [select Id,DeveloperName from RecordType where IsActive = true and SobjectType = 'Agency_Opportunity__c' and DeveloperName = 'Target'].Id; 
 | 
        //  LD 20200807 优化account record type ID 读取方法 End 
 | 
  
 | 
        List<Agency_Opportunity__c> upsertList = new List<Agency_Opportunity__c>(); 
 | 
        for (Account nObj : newList) { 
 | 
            //01210000000QjCNAA0 契約 
 | 
            if (nObj.RecordTypeId != '01210000000QjCNAA0') continue; 
 | 
            if (nObj.Aim_Price_GIR__c != null || nObj.Aim_Price_ET__c != null || nObj.Aim_Price_SP__c != null) { 
 | 
                Account old = null; 
 | 
                if (oldMap != null && oldMap.containsKey(nObj.Id)) { 
 | 
                    old = oldMap.get(nObj.Id); 
 | 
                } 
 | 
                //List<Agency_Opportunity__c> aopps = [select Id, Department_Cateogy_l__c, Aim_Price__c, OCM_Term__c, Agency__c, RecordTypeId 
 | 
                //  from Agency_Opportunity__c 
 | 
                //  where Agency_Hospital_Target__c = null and Agency__c = :nObj.ParentId and OCM_Term__c = :nObj.Contract_Fiscal_Period__c and RecordTypeId = :rtId]; 
 | 
                 
 | 
                //Map<String, Agency_Opportunity__c> dclMap = new Map<String, Agency_Opportunity__c>(); 
 | 
                //if (aopps.size() > 0) { 
 | 
                //  for (Agency_Opportunity__c aopp : aopps) { 
 | 
                //      dclMap.put(aopp.Department_Cateogy_l__c, aopp); 
 | 
                //  } 
 | 
                //} 
 | 
                 
 | 
                if (nObj.Aim_Price_GIR__c != null && (old == null || nObj.Aim_Price_GIR__c != old.Aim_Price_GIR__c)) { 
 | 
                    Agency_Opportunity__c aopp; 
 | 
                    //if (dclMap.containsKey('GIR')) { 
 | 
                    //  aopp = dclMap.get('GIR'); 
 | 
                    //} else { 
 | 
                    aopp = new Agency_Opportunity__c(); 
 | 
                    aopp.Agency__c = nObj.ParentId; 
 | 
                    aopp.OCM_Term__c = nObj.Contract_Fiscal_Period__c; 
 | 
                    aopp.RecordTypeId = rtId; 
 | 
                    aopp.Name = '目标::'+aopp.OCM_Term__c+':'+nObj.Name+' GIR'; 
 | 
                    aopp.Department_Cateogy_l__c = 'GIR'; 
 | 
                    aopp.TargetInputKey__c='AmtTarget:GIR:'+aopp.OCM_Term__c+nObj.Id; 
 | 
                    //} 
 | 
  
 | 
                    aopp.Aim_Price__c = nObj.Aim_Price_GIR__c; 
 | 
  
 | 
                    upsertList.add(aopp); 
 | 
                } 
 | 
  
 | 
                if (nObj.Aim_Price_ET__c != null && (old == null || nObj.Aim_Price_ET__c != old.Aim_Price_ET__c)) { 
 | 
                    Agency_Opportunity__c aopp; 
 | 
                    //if (dclMap.containsKey('ET')) { 
 | 
                    //  aopp = dclMap.get('ET'); 
 | 
                    //} else { 
 | 
                    aopp = new Agency_Opportunity__c(); 
 | 
                    aopp.Agency__c = nObj.ParentId; 
 | 
                    aopp.OCM_Term__c = nObj.Contract_Fiscal_Period__c; 
 | 
                    aopp.RecordTypeId = rtId; 
 | 
                    aopp.Name = '目标::'+aopp.OCM_Term__c+':'+nObj.Name+' ET'; 
 | 
                    aopp.Department_Cateogy_l__c = 'ET'; 
 | 
                    aopp.TargetInputKey__c='AmtTarget:ET:'+aopp.OCM_Term__c+nObj.Id; 
 | 
                    //} 
 | 
  
 | 
                    aopp.Aim_Price__c = nObj.Aim_Price_ET__c; 
 | 
  
 | 
                    upsertList.add(aopp); 
 | 
                } 
 | 
  
 | 
                if (nObj.Aim_Price_SP__c != null && (old == null || nObj.Aim_Price_SP__c != old.Aim_Price_SP__c)) { 
 | 
                    Agency_Opportunity__c aopp; 
 | 
                    //if (dclMap.containsKey('SP')) { 
 | 
                    //  aopp = dclMap.get('SP'); 
 | 
                    //} else { 
 | 
                    aopp = new Agency_Opportunity__c(); 
 | 
                    aopp.Agency__c = nObj.ParentId; 
 | 
                    aopp.OCM_Term__c = nObj.Contract_Fiscal_Period__c; 
 | 
                    aopp.RecordTypeId = rtId; 
 | 
                    aopp.Name = '目标::'+aopp.OCM_Term__c+':'+nObj.Name+' SP'; 
 | 
                    aopp.Department_Cateogy_l__c = 'SP'; 
 | 
                    aopp.TargetInputKey__c='AmtTarget:SP:'+aopp.OCM_Term__c+nObj.Id; 
 | 
                    //} 
 | 
  
 | 
                    aopp.Aim_Price__c = nObj.Aim_Price_SP__c; 
 | 
  
 | 
                    upsertList.add(aopp); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        if (upsertList.size() > 0) { 
 | 
            upsert upsertList TargetInputKey__c; 
 | 
        } 
 | 
    } 
 | 
    // LHJ KWAG-BQMA89 202006 Start 
 | 
    private void updateAgencyAccout() { 
 | 
  
 | 
        List<Id> accList = new List<Id>(); 
 | 
        List<Agency_Hospital_Link__c> agencyAccList = new List<Agency_Hospital_Link__c>(); 
 | 
        List<Agency_Hospital_Link__c> updAgenAccList = new List<Agency_Hospital_Link__c>(); 
 | 
  
 | 
        for (Account nObj : newList) { 
 | 
            if (oldMap.get(nObj.Id).Is_Active__c == '有効' && nObj.Is_Active__c != '有効'  ) { 
 | 
                accList.add(nObj.Id); 
 | 
            } 
 | 
        } 
 | 
        if (accList.size() > 0) { 
 | 
            agencyAccList = [select id, Agency_Campaign_Obj__c from Agency_Hospital_Link__c where Hospital__c in :accList]; 
 | 
            for (Agency_Hospital_Link__c agenAcc : agencyAccList) { 
 | 
                if(agenAcc.Agency_Campaign_Obj__c == true){ 
 | 
                    agenAcc.Agency_Campaign_Obj__c = false;  
 | 
                    updAgenAccList.add(agenAcc); 
 | 
                } 
 | 
            } 
 | 
            if (updAgenAccList.size() > 0 ) { 
 | 
                update updAgenAccList; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
    // LHJ KWAG-BQMA89 202006 End 
 | 
    // fxk 担当人改变后担当发生变化给他‘√’上 2021/7/21 Start 
 | 
    public void changeAssume() { 
 | 
        for (Account Accs : newList) { 
 | 
            if (Accs.GI_Main__c != null && Accs.GI_Main__c != oldMap.get(Accs.Id).GI_Main__c) { 
 | 
                Accs.Assume_Change__c = true; 
 | 
            } 
 | 
            if (Accs.BF_owner__c != null && Accs.BF_owner__c != oldMap.get(Accs.Id).BF_owner__c) { 
 | 
                Accs.Assume_Change__c = true; 
 | 
            } 
 | 
            if (Accs.ET_owner__c != null && Accs.ET_owner__c != oldMap.get(Accs.Id).ET_owner__c) { 
 | 
                Accs.Assume_Change__c = true; 
 | 
            } 
 | 
            if (Accs.SP_Main__c != null && Accs.SP_Main__c != oldMap.get(Accs.Id).SP_Main__c) { 
 | 
                Accs.Assume_Change__c = true; 
 | 
            } 
 | 
            if (Accs.URO_owner_ID__c != null && Accs.URO_owner_ID__c != oldMap.get(Accs.Id).URO_owner_ID__c) { 
 | 
                Accs.Assume_Change__c = true; 
 | 
            } 
 | 
            if (Accs.GYN_owner__c != null && Accs.GYN_owner__c != oldMap.get(Accs.Id).GYN_owner__c) { 
 | 
                Accs.Assume_Change__c = true; 
 | 
            } 
 | 
            if (Accs.ENT_owner_ID__c != null && Accs.ENT_owner_ID__c != oldMap.get(Accs.Id).ENT_owner_ID__c) { 
 | 
                Accs.Assume_Change__c = true; 
 | 
            } 
 | 
            if (Accs.Energy_LeaderStr__c != null && Accs.Energy_LeaderStr__c != oldMap.get(Accs.Id).Energy_LeaderStr__c) { 
 | 
                Accs.Assume_Change__c = true; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
    // fxk 担当人改变后担当发生变化给他‘√’上 2021/7/21 End 
 | 
    //  
 | 
    public static Map<Id,Id> NFM601_IdMap = new Map<Id,Id>(); 
 | 
    private void SetAwaitToSendAWS(){ 
 | 
        Map<String,String> recordTypeIdMap = new Map<String,String>(); 
 | 
        recordTypeIdMap.put('01210000000QfmbAAC', '');//其他 
 | 
        recordTypeIdMap.put('01210000000QfmRAAS', '');//呼吸科 
 | 
        recordTypeIdMap.put('01210000000QfmMAAS', '');//妇科 
 | 
        recordTypeIdMap.put('01210000000QfmHAAS', '');//普外科 
 | 
        recordTypeIdMap.put('01210000000QfmCAAS', '');//泌尿科 
 | 
        recordTypeIdMap.put('01210000000Qfm7AAC', '');//消化科 
 | 
        recordTypeIdMap.put('01210000000Qfm2AAC', '');//耳鼻喉科 
 | 
        recordTypeIdMap.put('01210000000Qem1AAC', '');//经销商 
 | 
        recordTypeIdMap.put('01210000000QemGAAS', '');//医院 
 | 
  
 | 
        List < String > queueableAccountIdList = new List < String > (); 
 | 
        List<String>    interfaceUserUpsertAccount = new List<String>(); 
 | 
        // 判断当前用户是否是接口用户和系统管理员 
 | 
         
 | 
        for (Account acc : newList) { 
 | 
  
 | 
            String developerId = acc.RecordTypeId; 
 | 
            if (recordTypeIdMap.containsKey(developerId) && ('有效'.equals(acc.Is_Active_Formula__c) || '无效'.equals(acc.Is_Active_Formula__c))) { 
 | 
                Account old = null; 
 | 
  
 | 
                if (oldMap != null && oldMap.containsKey(acc.Id)) { 
 | 
                    old = oldMap.get(acc.Id); 
 | 
                } 
 | 
                if (old == null) {// 新增医院/科室/经销商 
 | 
                    if (!NFM601_IdMap.containsKey(acc.Id)) { 
 | 
                        // 判断是否是接口用户 
 | 
                        if(UserInfo.getUserId().equals(System.Label.interfaceUserID)){ 
 | 
                            interfaceUserUpsertAccount.add(acc.Id); 
 | 
                        } else { 
 | 
                            queueableAccountIdList.add(acc.Id);  
 | 
                        } 
 | 
                         
 | 
                        NFM601_IdMap.put(acc.Id, acc.Id);   
 | 
                    } 
 | 
                } else { 
 | 
                    if (acc.Name != old.Name //名称变更 
 | 
                        || acc.Salesdepartment_HP__c != old.Salesdepartment_HP__c //销售本部 
 | 
                        || acc.State_Master__c  != old.State_Master__c //省 
 | 
                        || acc.City_Master__c  != old.City_Master__c //市 
 | 
                        || acc.Is_Active__c  != old.Is_Active__c // 有效/无效 
 | 
                        || acc.Site  != old.Site //别名1 
 | 
                        || acc.Alias_Name2__c  != old.Alias_Name2__c //别名2 
 | 
                        || acc.Abbreviation__c  != old.Abbreviation__c //简称 
 | 
                        || acc.Phone  != old.Phone //电话 
 | 
                        || acc.Postal_Code__c  != old.Postal_Code__c //邮编 
 | 
                        || acc.Address__c  != old.Address__c //地址 
 | 
                        || (developerId == '01210000000Qem1AAC' && //经销商 
 | 
                            (acc.Business_Paper_Expiration_Date__c  != old.Business_Paper_Expiration_Date__c || //营业执照有效期限   
 | 
                                acc.Tax_Practice_Expiration_Date__c  != old.Tax_Practice_Expiration_Date__c || //税务登记证有效期限   
 | 
                                acc.Medical_Equipment_Expiration_Date__c  != old.Medical_Equipment_Expiration_Date__c || //医疗器械经营企业许可证有效期限     
 | 
                                acc.DGLicenseTo__c  != old.DGLicenseTo__c || //危险化学品经营许可证效期至 
 | 
                                acc.SPO_ApplicationNo__c  != old.SPO_ApplicationNo__c))// SPO申请单号    
 | 
                        ) { 
 | 
                        if (!NFM601_IdMap.containsKey(acc.Id)) { 
 | 
                            if(UserInfo.getUserId().equals(System.Label.interfaceUserID)){ 
 | 
                                interfaceUserUpsertAccount.add(acc.Id); 
 | 
                            } else { 
 | 
                                queueableAccountIdList.add(acc.Id); 
 | 
                            }  
 | 
                            NFM601_IdMap.put(acc.Id, acc.Id);   
 | 
                        } 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
     
 | 
        } 
 | 
        if(!System.Test.isRunningTest()){ 
 | 
  
 | 
            if (queueableAccountIdList.size() > 0) { 
 | 
                NFM601Controller.callout('', queueableAccountIdList); 
 | 
            } 
 | 
            if (interfaceUserUpsertAccount.size() > 0) { 
 | 
                NFM601Controller.executefuture('', interfaceUserUpsertAccount); 
 | 
            } 
 | 
        } 
 | 
  
 | 
    } 
 | 
} 
 |