buli
2022-04-15 900c50a247705d6fe8833e84d31b5d51616b7c26
force-app/main/default/triggers/AccountTrigger.trigger
@@ -1,218 +1,53 @@
/**
 * 客户同步 在SP、GI主担当变化时更新询价权限
 */
trigger AccountTrigger on Account (after insert, after update, before delete, before insert, before update, after delete ) {
    if (StaticParameter.EscapeAccountTrigger) {
System.debug('Escape、EscapeAccountTrigger:::::' + StaticParameter.EscapeAccountTrigger);
        return;
trigger AccountTrigger on Account (before insert, before update, after insert, after update) {
    if (Trigger.isBefore && Trigger.isInsert) {
        //新建之前就给赋值 gwy 2021-06-16
        for (Account acc : Trigger.new) {
            if(acc.ProductSegment__c == 'IE' && acc.Sub_Use1__c != null){
                acc.Sub_Use__c  = acc.Sub_Use1__c;
            }
            if(acc.ProductSegment__c == 'IE' && acc.Sub_UseA__c != null){
                acc.Sub_UseD__c = acc.Sub_UseA__c;
            }
            if(acc.ProductSegment__c == 'BS' && acc.IndustryB__c != null){
                acc.IndustryC__c  = acc.IndustryB__c;
            }
            if(acc.ProductSegment__c == 'BS' && acc.IndustryBD__c != null){
                acc.IndustryCD__c = acc.IndustryBD__c;
            }
        }
        AccountTriggerHandler.setIsNew(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
        AccountTriggerHandler.setSubUse(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
    }
    if ((Trigger.isAfter && Trigger.isInsert) || (Trigger.isAfter && Trigger.isUpdate) || (Trigger.isBefore && Trigger.isDelete)) {
        // 同步到 Account2__c
        AccountTrigger.syncAccount2(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
//        // 同步到 MB_Account__c
        //AccountTrigger.syncMBAccount(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
    if (Trigger.isAfter && Trigger.isInsert) {
        AccountTriggerHandler.setDealerGroup(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
        AccountTriggerHandler.updateCampaignRelationship(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap,'1');
    }
    if ((Trigger.isAfter && Trigger.isInsert) || Trigger.isUpdate || (Trigger.isAfter && Trigger.isDelete)) {
        // 经销商有效协议判断 BY GAO
        AccountEffectiveContract.syncAccountContract(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
    if (Trigger.isBefore && Trigger.isUpdate) {
        //更新前就给赋值 gwy 2021-06-16
        for (Account acc : Trigger.new) {
            if(acc.ProductSegment__c == 'IE' && acc.Sub_Use1__c != null){
                acc.Sub_Use__c  = acc.Sub_Use1__c;
            }
            if(acc.ProductSegment__c == 'IE' && acc.Sub_UseA__c != null){
                acc.Sub_UseD__c = acc.Sub_UseA__c;
            }
            if(acc.ProductSegment__c == 'BS' && acc.IndustryB__c != null){
                acc.IndustryC__c  = acc.IndustryB__c;
            }
            if(acc.ProductSegment__c == 'BS' && acc.IndustryBD__c != null){
                acc.IndustryCD__c = acc.IndustryBD__c;
            }
        }
        AccountTriggerHandler.setSubUse(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
        AccountTriggerHandler.updateForDealer(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
        AccountTriggerHandler.dealerAccountApproval(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
        AccountTriggerHandler.CheckAccoutnNameChange(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
    }
    //CHAN-ADE32V 检查战略科室中的科室名是否重复 by wei
    if (Trigger.isBefore && (Trigger.isInsert || Trigger.isUpdate)) {
        System.debug('=============> checkDepartment start');
        AccountTrigger.checkDepartment(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
        if(Trigger.isUpdate){
            for(Account acc : Trigger.new){
                if( acc.Is_Active__c == '無効' && acc.OwnerId == UserInfo.getUserId()){
                    acc.Is_Active__c = '草案中';
                }
            }
        }
    }
    if (System.Test.isRunningTest()) {
        if(Trigger.isInsert & Trigger.isAfter){
            AfterCreateHospitalTrigger.generateDepartmentClass(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
        }
    if (Trigger.isAfter && Trigger.isUpdate) {
        AccountTriggerHandler.dealerAccountApproval2(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
        AccountTriggerHandler.setBusinesslicense(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
    }
    if(Trigger.isUpdate && Trigger.isBefore){
    if ((Trigger.isAfter && Trigger.isInsert) || (Trigger.isBefore && Trigger.isUpdate)) {
        SBG001TriggerHandler.SBG001AccountTrigger(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
    }
    if(Trigger.isAfter && Trigger.isUpdate){
        System.debug('+++====+++===+++== OwnerId Start');
        AccountTrigger.changeOwnerId(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
        AccountTrigger.setDepartmentOwner(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
        AfterCreateHospitalTrigger.generateDepartmentClass(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
        AccountTrigger.fseChangeToUpdRepair(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
        /**
         * HWAG-B4PCZ5 2018-09-19 start 如果客户更新SP,GI 主担当,
         * 则删除原来的用户在所对应询价的共享规则,并根据新主担当创建新共享规则
         */
        list<Account> updateAcc = new list<Account>();
        list<ID> RemoveUsers = new list<ID>();
        list<string> allViceAliasList = new list<string>();
        for(Account NewAcc : Trigger.new) {
            Account OldAcc =  Trigger.oldMap.get(NewAcc.id);
            if(NewAcc.FSE_GI_Main_Leader__c != OldAcc.FSE_GI_Main_Leader__c
                || NewAcc.FSE_SP_Main_Leader__c != OldAcc.FSE_SP_Main_Leader__c
                /* SWAG-B7LADC 2018/12/19 FSE ENG   start*/
                || NewAcc.FSE_ENG_Main_Leader__c != OldAcc.FSE_ENG_Main_Leader__c
                || NewAcc.FSE_ENG_Vice_Leader__c != OldAcc.FSE_ENG_Vice_Leader__c
                || NewAcc.FSE_GI_Vice_Leader__c != OldAcc.FSE_GI_Vice_Leader__c
                || NewAcc.FSE_SP_Vice_Leader__c != OldAcc.FSE_SP_Vice_Leader__c
                /* SWAG-B7LADC 2018/12/19 FSE ENG   start*/
                )
            {
                updateAcc.add(NewAcc);
                if(OldAcc.FSE_GI_Main_Leader__c !=null && NewAcc.FSE_GI_Main_Leader__c != OldAcc.FSE_GI_Main_Leader__c){
                    RemoveUsers.add(OldAcc.FSE_GI_Main_Leader__c);
                }
                if(OldAcc.FSE_SP_Main_Leader__c !=null && NewAcc.FSE_SP_Main_Leader__c != OldAcc.FSE_SP_Main_Leader__c){
                    RemoveUsers.add(OldAcc.FSE_SP_Main_Leader__c);
                }
                /* SWAG-B7LADC 2018/12/19 FSE ENG   start*/
                if(OldAcc.FSE_ENG_Main_Leader__c !=null && NewAcc.FSE_ENG_Main_Leader__c != OldAcc.FSE_ENG_Main_Leader__c){
                    RemoveUsers.add(OldAcc.FSE_ENG_Main_Leader__c);
                }
                if( OldAcc.FSE_ENG_Vice_Leader__c != null && NewAcc.FSE_ENG_Vice_Leader__c != OldAcc.FSE_ENG_Vice_Leader__c){
                    for(String UsrName : OldAcc.FSE_ENG_Vice_Leader__c.split('[,\\,]')){
                        allViceAliasList.add(UsrName);
                    }
                 }
                if(OldAcc.FSE_GI_Vice_Leader__c != null &&  NewAcc.FSE_GI_Vice_Leader__c != OldAcc.FSE_GI_Vice_Leader__c){
                    for(String UsrName : OldAcc.FSE_GI_Vice_Leader__c.split('[,\\,]')){
                        allViceAliasList.add(UsrName);
                    }
                 }
                if(OldAcc.FSE_SP_Vice_Leader__c != null && NewAcc.FSE_SP_Vice_Leader__c != OldAcc.FSE_SP_Vice_Leader__c){
                    for(String UsrName : OldAcc.FSE_SP_Vice_Leader__c.split('[,\\,]')){
                        allViceAliasList.add(UsrName);
                    }
                 }
                /* SWAG-B7LADC 2018/12/19 FSE ENG   start*/
            }
        }
        //throw new ControllerUtil.myException('Anydatatype_msgaaaaaaaa:'+allViceAliasList);
        if(updateAcc.size() > 0){
            if(allViceAliasList.size() > 0){
                 List<User> loopUser = [select id from user where Alias__c in:allViceAliasList];
                 for(User temUser : loopUser){
                    RemoveUsers.add(temUser.id);
                 }
            }
            list<Statu_Achievements__c> updateSA =
            [select id,Opportunity__c from Statu_Achievements__c where
            Opportunity__r.Hospital__c in : updateAcc
            and DeliveryDate__c != null
            and ForecastAccuracyObject__c = true
             ];
            //throw new ControllerUtil.myException('Anydatatype_msgaaaaaaaa:'+updateSA);
            if(updateSA != null || updateSA.size() > 0){
                list<ID> temOpportunity = new list<ID>();
                for(Statu_Achievements__c TemSA :updateSA){
                    temOpportunity.add(TemSA.Opportunity__c);
                }
                list<OpportunityShare> deleteOS =
                [select id from OpportunityShare
                    where UserOrGroupId in: RemoveUsers
                    and OpportunityId in: temOpportunity
                    and RowCause = 'Manual'
                ];
                if(deleteOS != null &&deleteOS.size() > 0){
                    delete deleteOS;
                }
                StaticParameter.EscapeNFM010UpsertStatuAchievementsTrigger = true;
                upsert updateSA;
            }
        }
        //HWAG-B4PCZ5 2018-09-19 end
        //NFM112 2021/11/10 start
        String Idbox;
        for(Account account : Trigger.new){
           Account old = Trigger.oldMap.get(account.Id);
           if(old.FirstParagraph__c != account.FirstParagraph__c  || old.MonthlyPayment__c != account.MonthlyPayment__c){
                    Idbox = account.Id;
            }
        }
        if(Idbox != null){
            BatchIF_Log__c iflog = new BatchIF_Log__c();
            iflog.Type__c = 'NFM112';
            iflog.Log__c  = 'callout start\n';
            insert iflog;
            iflog = [Select Id, Name from BatchIF_Log__c where Id = :iflog.Id];
            System.debug(Logginglevel.DEBUG, 'NFM112_' + iflog.Name + ' start');
            NFM112Controller.executeNotFuture(iflog.Id, Idbox);
        }
        //NFM112 2021/11/10 end
    }
    //add            wangweipeng              2022/02/10                            start
    //经销商的性质发生变化,那么需要发邮件,其中一个收件人为大区助理
    //大区助理:根据此经销商所在的那个大区,来判断到底发给谁,每个大区助理都有一个人,目前是存到自定义源数据里面了
    if(Trigger.isBefore){
        //用于存放此经销商是那个大区
        Set<String> setStaff = new Set<String>();
        if(Trigger.isUpdate){
            for (Account acc : Trigger.new) {
                //判断当前修改的客户是否为经销商
                if(acc.RecordTypeId == '01210000000Qem1'){
                    //如果是修改经销商,那么判断此经销商的先款标识是否发生变化,如果发送变化,那么就更新一下大区
                    if(acc.FirstParagraphEnd__c != Trigger.oldMap.get(acc.Id).FirstParagraphEnd__c){
                        setStaff.add(acc.Salesdepartment_HP__c);
                    }
                }
            }
        }else if(Trigger.isInsert){
            for (Account acc : Trigger.new) {
                //判断当前新增的客户是否为经销商
                if(acc.RecordTypeId == '01210000000Qem1'){
                    setStaff.add(acc.Salesdepartment_HP__c);
                }
            }
        }
        if(setStaff.size() > 0){
            //获取对应的自定义元数据
            List<FSE_Regional_Assistant_Account__mdt> usrList = [select id,MasterLabel,DeveloperName,UserName__c,UserId__c from FSE_Regional_Assistant_Account__mdt where MasterLabel in :setStaff];
            if(usrList != null && usrList.size() > 0){
                //获取大区对应的助理人的id
                if(Trigger.isUpdate){
                    for (Account acc : Trigger.new) {
                        for(FSE_Regional_Assistant_Account__mdt fraam : usrList){
                            if(acc.FirstParagraphEnd__c != Trigger.oldMap.get(acc.Id).FirstParagraphEnd__c){
                                if(fraam.MasterLabel == acc.Salesdepartment_HP__c){
                                    acc.FSE_Regional_Assistant_Account__c = fraam.UserId__c;
                                }
                            }
                        }
                    }
                }else if(Trigger.isInsert){
                    for (Account acc : Trigger.new) {
                       for(FSE_Regional_Assistant_Account__mdt fraam : usrList){
                            if(fraam.MasterLabel == acc.Salesdepartment_HP__c){
                                acc.FSE_Regional_Assistant_Account__c = fraam.UserId__c;
                            }
                        }
                    }
                }
            }
        }
    }
    //add            wangweipeng              2022/02/10                            end
    // if(Trigger.isUpdate){
    //     List<String> IdList = new List<String>();
    //     for(Account account : Trigger.new){
    //        Account old = Trigger.oldMap.get(account.Id);
    //        if(old.FirstParagraph__c != account.FirstParagraph__c  || old.MonthlyPayment__c != account.MonthlyPayment__c){
    //                 IdList.add(account.Id);
    //         }
    //     }
    //     if(IdList.size()>0){
    //         UpdateContractAimAmountHandler.sendToSAP(IdList);
    //     }
    // }
}