19626
2023-10-07 988f9735377909b6310301e582c15804e004783f
force-app/main/default/classes/LostCancelReportHandler.cls
@@ -17,7 +17,8 @@
        updateManager();
        //【FY23询价改善】-P:中标结果确认任务开发  20220706  更新失单任务确认时间
        updateLostTaskTime();
        // 更新营业助理
        updateSalesAssistant();
    }
    // 更新审批人 20200302 End
@@ -45,10 +46,11 @@
        Set<Id> sdoppidSet = new Set<Id>();
        List<Id> updateOppId = new List<Id>(); 
        List<Opportunity> updateOpp = new List<Opportunity>();
        Map<String,String> cancelMap = new Map<String,String>();//lt 20230425 招标终止 add
        
        for(Lost_cancel_report__c lcr : newList){
            oppIdList.add(lcr.Opportunity__c);
            cancelMap.put(lcr.Opportunity__c, lcr.RecordType.Name);//lt 20230425 招标终止 add
        }
        // 20221202 ljh DB202211594688  start
        // List<task__c> taskList = [select id,taskStatus__c,OpportunityId__c from task__c where RecordType.Name ='中标结果确认' and taskStatus__c = '02 接受' and OpportunityId__c in :oppIdList];
@@ -57,8 +59,22 @@
        //     //updateOppId.add(tsk.OpportunityId__c); //20220823 you 没有任务时,
        // }
        // LoseListTask 失单报告任务   winBiddingTask  中标结果确认
        List<task__c> taskList = [select id,taskStatus__c,OpportunityId__c,RecordType.Name from task__c where (RecordType.Name ='中标结果确认' or RecordType.Name ='失单报告任务')  and OpportunityId__c in :oppIdList];
        for(task__c tsk : taskList){
        List<task__c> taskList = [select id,taskStatus__c,OpportunityId__c,RecordType.Name
                                  from task__c
                                  where (RecordType.Name ='中标结果确认' or RecordType.Name ='失单报告任务')
                                  and OpportunityId__c in :oppIdList];
        // 20230508 ljh DB202305008316 start
        /*for(task__c tsk : taskList){
            //lt 20230425 招标终止 start
            System.debug('---lt123---cancelMap:'+cancelMap);
            System.debug('---lt123---cancelMap.get(tsk.OpportunityId__c):'+cancelMap.get(tsk.OpportunityId__c));
            if(cancelMap.containsKey(tsk.OpportunityId__c)){
                if(cancelMap.get(tsk.OpportunityId__c) == 'PCL_Cancel_report'){
                    tsk.taskStatus__c = '04 取消';
                    tsk.cancelReasonSelect__c = '项目终止';
                }
            }else
            //lt 20230425 招标终止 end
            if(tsk.RecordType.Name == '中标结果确认' && tsk.taskStatus__c == '02 接受'){
                tsk.taskStatus__c = '03 完成';
            }
@@ -67,7 +83,28 @@
                sdoppidSet.add(tsk.OpportunityId__c);
            }
            oppIdSet.add(tsk.OpportunityId__c);
        }*/
        List<task__c> Uptask = new List<task__c>();
        for(task__c tsk : taskList){
            task__c temp = new task__c();
            temp.Id = tsk.Id;
            if(cancelMap.containsKey(tsk.OpportunityId__c)){
                if(cancelMap.get(tsk.OpportunityId__c) == 'PCL_Cancel_report'){
                    temp.taskStatus__c = '04 取消';
                    temp.cancelReasonSelect__c = '项目终止';
        }
            }else
            if(tsk.RecordType.Name == '中标结果确认' && tsk.taskStatus__c == '02 接受'){
                temp.taskStatus__c = '03 完成';
            }
            if(tsk.RecordType.Name == '失单报告任务'){
                sdoppidSet.add(tsk.OpportunityId__c);
            }
            oppIdSet.add(tsk.OpportunityId__c);
            Uptask.add(temp);
        }
        // 20230508 ljh DB202305008316 end
        // for(Id oppId : oppIdList){//20220823 you
        for(Id oppId : oppIdSet){
        // 20221202 ljh DB202211594688  end
@@ -89,9 +126,12 @@
            updateOpp.add(opptemp);
        }
        
      update updateOpp;
        update taskList;
        // 20230508 ljh DB202305008316 start
        // update taskList;
        update Uptask;
        // 20230508 ljh DB202305008316 end
    }
    //2022-6-22 yjk 询价跟进任务 end
@@ -191,11 +231,28 @@
        //20220708 询价任务开发,结束失单任务状态,筛选需要的修改的失单任务 start
        Set<String> oppIdSet = new Set<String>();
        Set<String> passOppIdSet = new Set<String>();
        for (Lost_cancel_report__c n: newList) {
            if ((n.Report_Status__c != oldMap.get(n.Id).Report_Status__c) && n.Report_Status__c == '申请中') {
                oppIdSet.add(n.Opportunity__c);
            }
            if ((n.Report_Status__c != oldMap.get(n.Id).Report_Status__c) && n.Report_Status__c == '批准') {
                passOppIdSet.add(n.Opportunity__c);
        }
        }
        // 20230411 多失单报告合并,取出待合并的询价 start
        Map<String, Opportunity> mapOpps = new Map<String, Opportunity>();
        List<Opportunity> lstOpps = [select Id, RivalHostsNumber__c, CompetitorProduct1__c,
                                        CompetitorProduct2__c, CompetitorProduct3__c, Lost_reason_main__c,
                                        Lost_Reason_Sub__c, Agencies__c, PCLLostBrands__c, of_lost_system_processor__c,
                                        LostPrices__c
                                    from Opportunity
                                    where Id in :passOppIdSet];
        for(Opportunity opp : lstOpps) {
            mapOpps.put(opp.Id, opp);
        }
        System.debug('mapOpps: ' + mapOpps);
        // 20230411 多失单报告合并,取出待合并的询价 end
        // 20220720 ljh add 记录取消/失单报告提交时点的战略产品判断 start
        if(oppIdSet.size() > 0 ){
            List<OpportunityLineItem> OppLIlist = [select Id,Key_product_147P_Text__c,Key_product_147P__c from OpportunityLineItem  where OpportunityId in :oppIdSet];
@@ -204,7 +261,11 @@
            }
            update OppLIlist;
        // 20220720 ljh add 记录取消/失单报告提交时点的战略产品判断 end
           List<task__c> taskList = [select id,taskStatus__c from task__c where RecordType.Name ='失单报告任务' and taskStatus__c = '02 接受' and OpportunityId__c in :oppIdSet];
           List<task__c> taskList = [select id,taskStatus__c
                                      from task__c
                                      where RecordType.Name ='失单报告任务'
                                      and taskStatus__c = '02 接受'
                                      and OpportunityId__c in :oppIdSet];
           for(task__c tsk : taskList){
               tsk.taskStatus__c = '03 完成';
           }
@@ -214,11 +275,13 @@
        List<PCLLostProduct__c> lcrList=[select id,PCLLostBrand__r.Lost_cancel_report__r.of_lost_system_processor__c,
                                        PCLLostBrand__r.Lost_Reason_Sub__c,PCLLostBrand__r.Lost_cancel_report__r.LostTotalAmount__c,
                                        PCLLostBrand__r.Lost_cancel_report__r.TotalAmountLost__c,   //20230215 lt DB202302247719
                                        PCLLostBrand__r.Lost_cancel_report__r.LostType__c,PCLLostBrand__r.Lost_By_Company__c,
                                        PCLLostBrand__r.Lost_By_Company_Mannual__c,PCLLostBrand__r.LostPrice__c,LostProduct__r.Name, 
                                        PCLLostBrand__r.Lost_reason_main__c,PCLLostBrand__r.Agency__r.Name,PCLLostBrand__r.AgencyMannual__c,
                                        PCLLostBrand__r.Lost_cancel_report__r.Opportunity__r.Name,Opportunity__c, LostProductMannual__c
                                        ,ProductClass__c, Quantity__c   //20220930  lt SWAG-CHL5XA【FY23询价改善】-统计主机台数
                                        ,ProductClass__c
                                        , Quantity__c   //20220930  lt SWAG-CHL5XA【FY23询价改善】-统计主机台数
                                        from PCLLostProduct__c 
                                        where PCLLostBrand__r.Lost_cancel_report__c in : arrMap.keyset()];
        List<Opportunity> oppList=new List<Opportunity>();
@@ -230,25 +293,24 @@
            List<String> ppList=new List<String>();     //失单品牌
            // List<String> yyList=new List<String>();     //失单原因
            //初始化
            Opportunity opp=new Opportunity();
            // 20230411 多失单报告合并,取出待合并的询价 start
            Opportunity opp = mapOpps != null && mapOpps.containsKey(arrMap.get(lcro).Opportunity__c) ? mapOpps.get(arrMap.get(lcro).Opportunity__c) : new Opportunity();
            //20220930  lt SWAG-CHL5XA【FY23询价改善】-统计主机台数 start
            opp.RivalHostsNumber__c = 0;
            System.debug('lt123初始失单主机数'+ opp.RivalHostsNumber__c);
            opp.RivalHostsNumber__c = opp.RivalHostsNumber__c != null ? opp.RivalHostsNumber__c : 0;
            //20220930  lt SWAG-CHL5XA【FY23询价改善】-统计主机台数 end
            opp.Id=arrMap.get(lcro).Opportunity__c; opp.PCLLostBrands__c=''; opp.Agencies__c='';    //Id ,品牌,经销商
            opp.Id = String.isNotBlank(opp.Id) ? opp.Id : arrMap.get(lcro).Opportunity__c;
            opp.PCLLostBrands__c = String.isNotBlank(opp.PCLLostBrands__c) ? opp.PCLLostBrands__c : '';
            opp.Agencies__c = String.isNotBlank(opp.Agencies__c) ? opp.Agencies__c : '';
            System.debug('opp: ' + opp);
            // 20230411 多失单报告合并,取出待合并的询价 end
            // for产品
            for (PCLLostProduct__c lcr : lcrList) {
                System.debug('lt123主机111'+ lcr.ProductClass__c);
                if (opp.Id==lcr.Opportunity__c) {
                    //20220930  lt SWAG-CHL5XA【FY23询价改善】-统计主机台数 start
                    System.debug('lt123主机'+ lcr.ProductClass__c);
                    if(lcr.ProductClass__c == '主机'){
                        opp.RivalHostsNumber__c += lcr.Quantity__c;
                        System.debug('lt123累加失单主机数'+ opp.RivalHostsNumber__c);
                    }else{
                        opp.RivalHostsNumber__c += 0;
                        System.debug('lt123不变失单主机数'+ opp.RivalHostsNumber__c);
                    }
                    //20220930  lt SWAG-CHL5XA【FY23询价改善】-统计主机台数 end
@@ -325,10 +387,21 @@
                    //  }
                    // }
                    //失单总金额
                    opp.LostPrices__c=lcr.PCLLostBrand__r.Lost_cancel_report__r.LostTotalAmount__c;
                    //opp.LostPrices__c=lcr.PCLLostBrand__r.Lost_cancel_report__r.LostTotalAmount__c;//20230215 lt DB202302247719 注释
                    // opp.LostPrices__c=lcr.PCLLostBrand__r.Lost_cancel_report__r.TotalAmountLost__c;   //20230215 lt DB202302247719
                    opp.of_lost_system_processor__c=lcr.PCLLostBrand__r.Lost_cancel_report__r.of_lost_system_processor__c;
                }
            }
            //20230215 lt DB202302247719 start
            if(arrMap.get(lcro).TotalAmountLost__c != null){
                if(opp.LostPrices__c == null){
                    opp.LostPrices__c = 0;
                }
                opp.LostPrices__c+=arrMap.get(lcro).TotalAmountLost__c;
                // System.debug('lt123---opp.LostPrices__c---失单金额2: '+opp.LostPrices__c);
            }
            //20230215 lt DB202302247719 end
            // 20221202 ljh DB202211594688  start
            System.debug('zheli00:'+oppIdPZSet+'~'+opp.Id);
            if(oppIdPZSet.contains(opp.Id)){
@@ -339,7 +412,6 @@
            oppList.add(opp);
        }
        update oppList;
    }
    // tcm 20211126 更新询价信息 end
@@ -352,7 +424,8 @@
        for(Lost_cancel_report__c lcr : newList){
            //筛选出需要提交日有修改的订单
            Lost_cancel_report__c oldLrc = oldMap.get(lcr.Id);
            if((lcr.Report_Status__c != oldMap.get(lcr.Id).Report_Status__c) && lcr.Report_Status__c == '申请中'){      //oldLrc.Submit_Day__c != lcr.Submit_Day__c
            //DB202309191132 紧急调查:修改失单报告失单报告确认时间被更新 lt 20230911 add  && lcr.ModifyAfterApproval_SubmitDay__c == null
            if((lcr.Report_Status__c != oldMap.get(lcr.Id).Report_Status__c) && lcr.Report_Status__c == '申请中' && lcr.ModifyAfterApproval_SubmitDay__c == null){      //oldLrc.Submit_Day__c != lcr.Submit_Day__c
                lostIds.add(lcr.Id);
                oppIds.add(lcr.Opportunity__c);
            }
@@ -398,13 +471,31 @@
        }
        System.debug('oppIds: ' + oppIds);
        if (oppIds.size() > 0) {
            List<Opportunity> opps = [select Id, StageName, Final_Contract_Proceeded_Date__c, Lost_Opportunity_Date__c from Opportunity where Id in :oppIds and StageName in ('敗戦', '削除')];
            //DB202303237846 lt 20230316 add   , Lost_Cancel_Report__c,Lost_Cancel_Report__r.Report_Status__c,Lost_Cancel_Report__r.LostType__c
            List<Opportunity> opps = [select Id, StageName, Final_Contract_Proceeded_Date__c, Lost_Opportunity_Date__c, Lost_Cancel_Report__c,Lost_Cancel_Report__r.Report_Status__c,Lost_Cancel_Report__r.LostType__c from Opportunity where Id in :oppIds and StageName in ('敗戦', '削除')];
            System.debug('opps: ' + opps);
            //DB202303237846 lt 20230316 start
            Set<String> oppSet = new Set<String>();
            List<Lost_Cancel_Report__c> oppreps = [select Id, Report_Status__c, LostType__c, Opportunity__c from Lost_Cancel_Report__c where Opportunity__c in :opps and Report_Status__c='批准' and LostType__c = '失单'];
            if(oppreps.Size() > 0){
                for(Lost_Cancel_Report__c lcp : oppreps){
                    oppSet.add(lcp.Opportunity__c);
                }
            }
            if (opps.size() > 0) {
                for (Opportunity opp : opps) {
                    if(oppSet.size() > 0 && oppSet.contains(opp.Id)){
                        continue;
                   }else{
                    opp.StageName = '引合';
                    opp.Final_Contract_Proceeded_Date__c = null;
                    opp.Lost_Opportunity_Date__c = null;
                   }
                    // if(opp.Lost_Cancel_Report__c == null || (opp.Lost_Cancel_Report__c != null && (opp.Lost_Cancel_Report__r.Report_Status__c != '批准' || opp.Lost_Cancel_Report__r.LostType__c != '失单'))){
                    // }
            //DB202303237846 lt 20230316 end
                }
                update opps;
            }
@@ -412,4 +503,20 @@
    }
    // 2022-7-29 ssm XLIU-CGSC8R 【委托】[改善】询价里删除批准的失单报告状态1自动变 end
    // 更新营业助理
    private void updateSalesAssistant() {
        Map<String, Opportunity> opps = new Map<String, Opportunity>();
        for (Lost_cancel_report__c report : this.newList) {
            opps.put(report.Opportunity__c, null);
        }
        if (opps != null && opps.size() > 0) {
            List<Opportunity> opplist = [select Id, Sales_assistant_ID__c from Opportunity where Id in :opps.keySet()];
            for (Opportunity opp : opplist) {
                opps.put(opp.Id, opp);
            }
            for (Lost_cancel_report__c report : this.newList) {
                report.Sales_assistant__c = opps.get(report.Opportunity__c) != null ? opps.get(report.Opportunity__c).Sales_assistant_ID__c : report.Sales_assistant__c;
            }
        }
    }
}