trigger SIUploadFile on SI_Attachment__c (before insert,after insert,after update) { 
 | 
     List<Id> copyUserIds = new List<Id>(); 
 | 
    List<SI_Attachment__c> newList = new List<SI_Attachment__c>(); 
 | 
    Map<String,Integer> countNumber = new  Map<String,Integer>(); 
 | 
    Map<id,id> SODOwnerMap = new Map<id,id>(); 
 | 
    Map<id,id> SODOwnerManMap = new Map<id,id>(); 
 | 
    Map<id,id> SODOwnerMinisterMap = new Map<id,id>(); 
 | 
    Map<id,id> SODOwnerMajorMap = new Map<id,id>();//总监 
 | 
    Map<id,id> SODOOpporAssisMap = new Map<id,id>();//询价助理 
 | 
    if(trigger.isInsert&&trigger.isAfter){ 
 | 
        List<id> SI_attidList = new List<id>(); 
 | 
        for(SI_Attachment__c sia : trigger.new){ 
 | 
            if( sia.Type__c == 'CAD图纸'|| 
 | 
                    sia.Type__c =='手术室净化平面图(含设备定位)'|| 
 | 
                        sia.Type__c == '目标术间吊塔定位图' || 
 | 
                            sia.Type__c =='目标术间净化立体图' || 
 | 
                                sia.Type__c =='示教点楼层平面图' || 
 | 
                                    sia.Type__c =='楼层建筑平面图' || 
 | 
                                        sia.Type__c =='其他工程文件清单'|| 
 | 
                                            sia.Type__c == '招标参数'|| 
 | 
                                                sia.Type__c == '标书'|| 
 | 
                                                    sia.Type__c == '项目方案书'){ 
 | 
                SI_attidList.add(sia.id); 
 | 
            } 
 | 
        } 
 | 
        if(SI_attidList.size()>0){ 
 | 
            ControllerUtil.UpdateSIFunctionStatus(SI_attidList); 
 | 
            system.debug(SI_attidList); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    if(trigger.isInsert && trigger.isBefore){ 
 | 
         
 | 
        List<id> oppsId = new List<id>(); 
 | 
        for(SI_Attachment__c siAc : trigger.new){ 
 | 
            oppsId.add(siAc.Opportunity_ID__c); 
 | 
            siAc.Opportunity_sub_owner__c = siAc.Opportunity_sub_ownerID__c; 
 | 
            newList.add(siAc); 
 | 
            copyUserIds.add(siAc.OwnerId); 
 | 
        } 
 | 
        AggregateResult[] CountSAIList = [select count(id) countID,Opportunity_ID__c oppoid 
 | 
                                                from SI_Attachment__c  
 | 
                                                where Opportunity_ID__c in:oppsId 
 | 
                                                group by Opportunity_ID__c]; 
 | 
        for(AggregateResult siA : CountSAIList){ 
 | 
            countNumber.put((Id)siA.get('oppoid'),(Integer)siA.get('countID')); 
 | 
        } 
 | 
        for(SI_Attachment__c siAc : trigger.new){ 
 | 
            siAc.Last_Two_Number__c = 1+(countNumber.get(siAc.Opportunity_ID__c)==null?0:countNumber.get(siAc.Opportunity_ID__c)); 
 | 
        } 
 | 
        List<IS_Opportunity_Demand__c> sodList = [select OwnerId,id,Opportunity_ID__c,SI_SalesManager__c, 
 | 
                                SI_Majordomo__c,SI_Minister_Sell__c,Opportunity_ID__r.Sales_assistant_ID__c from IS_Opportunity_Demand__c where Opportunity_ID__c in:oppsId  
 | 
                                and Abort_Date__c = null ]; 
 | 
        for(IS_Opportunity_Demand__c sod: sodList){ 
 | 
            SODOwnerMap.put(sod.Opportunity_ID__c, sod.OwnerId); 
 | 
            SODOwnerManMap.put(sod.Opportunity_ID__c, sod.SI_SalesManager__c); 
 | 
            SODOwnerMinisterMap.put(sod.Opportunity_ID__c, sod.SI_Minister_Sell__c); 
 | 
            SODOwnerMajorMap.put(sod.Opportunity_ID__c, sod.SI_Majordomo__c); 
 | 
            SODOOpporAssisMap.put(sod.Opportunity_ID__c, sod.Opportunity_ID__r.Sales_assistant_ID__c); 
 | 
        } 
 | 
         
 | 
    } 
 | 
    if(trigger.isUpdate){ 
 | 
        //============================================================================================================= 
 | 
        if(trigger.isBefore){ 
 | 
            List<id> oppsId = new List<id>(); 
 | 
         
 | 
            for(SI_Attachment__c siAc : trigger.new){ 
 | 
                oppsId.add(siAc.Opportunity_ID__c); 
 | 
                newList.add(siAc); 
 | 
                copyUserIds.add(siAc.OwnerId); 
 | 
            } 
 | 
             List<IS_Opportunity_Demand__c> sodList = [select OwnerId,id,Opportunity_ID__c,SI_SalesManager__c, 
 | 
                                    SI_Majordomo__c,SI_Minister_Sell__c,Opportunity_ID__r.Sales_assistant_ID__c from IS_Opportunity_Demand__c where Opportunity_ID__c in:oppsId  
 | 
                                    and Abort_Date__c = null ]; 
 | 
            for(IS_Opportunity_Demand__c sod: sodList){ 
 | 
                SODOwnerMap.put(sod.Opportunity_ID__c, sod.OwnerId); 
 | 
                SODOwnerManMap.put(sod.Opportunity_ID__c, sod.SI_SalesManager__c); 
 | 
                SODOwnerMinisterMap.put(sod.Opportunity_ID__c, sod.SI_Minister_Sell__c); 
 | 
                SODOwnerMajorMap.put(sod.Opportunity_ID__c, sod.SI_Majordomo__c); 
 | 
                SODOOpporAssisMap.put(sod.Opportunity_ID__c, sod.Opportunity_ID__r.Sales_assistant_ID__c); 
 | 
            } 
 | 
        } 
 | 
         
 | 
        
 | 
        //============================================================================================================= 
 | 
        List<id> oppid = new  List<id>(); 
 | 
        Map<id,Date> idMapDate = new Map<id,Date>(); 
 | 
        Map<id,Date> BidMapDate = new Map<id,Date>(); 
 | 
        for(SI_Attachment__c Sa : trigger.new){ 
 | 
            oppid.add(Sa.Opportunity_ID__c); 
 | 
            idMapDate.put(Sa.Opportunity_ID__c, Sa.ProJect_Confirm_Date__c); 
 | 
            BidMapDate.put(Sa.Opportunity_ID__c, Sa.bid_Confrim_Date__c); 
 | 
        } 
 | 
        List<Opportunity> OppList = [select Project_decide_date__c,bid_Confrim_Date__c from Opportunity where id In:oppid]; 
 | 
        for(Opportunity op : OppList){ 
 | 
            if(idMapDate.get(op.id)!=null){ 
 | 
                op.Project_decide_date__c = idMapDate.get(op.id); 
 | 
            } 
 | 
            if(BidMapDate.get(op.id)!=null){ 
 | 
                op.bid_Confrim_Date__c = BidMapDate.get(op.id); 
 | 
            } 
 | 
             
 | 
        } 
 | 
        update OppList; 
 | 
    } 
 | 
    if (copyUserIds.size() > 0) { 
 | 
            Map<Id, User> copyUserMap = new Map<Id, User>([ 
 | 
                SELECT Id, Name, SalesManager__c, BuchangApprovalManagerSales__c, JingliApprovalManager__c, BuchangApprovalManager__c, ZongjianApprovalManager__c FROM User WHERE Id IN :copyUserIds 
 | 
            ]); 
 | 
             
 | 
            for (Integer i = 0; i < copyUserIds.size(); i++) { 
 | 
                SI_Attachment__c local = newList[i]; 
 | 
                User loginUser = copyUserMap.get(copyUserIds[i]); 
 | 
                local.SI_File_Manager_Sell__c = loginUser.SalesManager__c == null ? loginUser.Id : loginUser.SalesManager__c; 
 | 
                local.SI_File_Minister_Sell__c = loginUser.BuchangApprovalManagerSales__c == null ? loginUser.Id : loginUser.BuchangApprovalManagerSales__c; 
 | 
                local.SI_File_Minister_Service__c = loginUser.BuchangApprovalManager__c == null ? loginUser.Id : loginUser.BuchangApprovalManager__c; 
 | 
                local.SI_File_Majordomo_Sell__c = loginUser.ZongjianApprovalManager__c == null ? loginUser.Id : loginUser.ZongjianApprovalManager__c; 
 | 
                local.File_Upload_Date__c = Date.today(); 
 | 
                local.SI_SOD_Owner__c = SODOwnerMap.get(local.Opportunity_ID__c); 
 | 
                local.SI_SOD_Owner_Manager__c = SODOwnerManMap.get(local.Opportunity_ID__c); 
 | 
                local.Oppor_Assistant__c = SODOOpporAssisMap.get(local.Opportunity_ID__c); 
 | 
            } 
 | 
        } 
 | 
     
 | 
} 
 |