李彤
2022-09-23 d79fcb2a960e8b0e18fe039d892f98187b08866d
force-app/main/default/classes/OpportunityTrigger.cls
@@ -1,5 +1,7 @@
public without sharing class OpportunityTrigger {
    public static Boolean isFirst = true;
    public static void lockOpportunityFile(List<Opportunity> newList, Map<Id, Opportunity> newMap, List<Opportunity> oldList, Map<Id, Opportunity> oldMap) {
        List<String> targetIds = new List<String>();
@@ -20,6 +22,7 @@
        update ofileList;
    }
    //CHAN-AZJ6JS 追溯系统来的询价,取消WIN时,经销商订单自动改到“驳回”
    public static void changeConsumableOrderStatus(List<Opportunity> newList, Map<Id, Opportunity> newMap, List<Opportunity> oldList, Map<Id, Opportunity> oldMap) {
        
@@ -163,10 +166,14 @@
                //     temptender.IsReactionOpp__c = true;
                //     tenderMap.put(temptender.id ,temptender ); 
                // }
                // 合并判断条件
                // 合并判断条件
                //20220803 you 招标项目增加 取消,中标结果更新确认条件
                if((op.SAP_Send_OK__c != oldopp.SAP_Send_OK__c) || 
                    ((op.StageName__c.equals('失单') && !oldopp.StageName__c.equals('失单')) || 
                    (!op.StageName__c.equals('失单') && oldopp.StageName__c.equals('失单')))) {
                    (!op.StageName__c.equals('失单') && oldopp.StageName__c.equals('失单'))) ||
                    ((op.StageName__c.equals('取消') && !oldopp.StageName__c.equals('取消')) ||
                    (!op.StageName__c.equals('取消') && oldopp.StageName__c.equals('取消'))) ||
                    (String.isNotBlank(op.ConfirmationofAward__c) && op.ConfirmationofAward__c!=oldopp.ConfirmationofAward__c)) {
                    for (Tender_Opportunity_Link__c link : links) {
                        if (link.Opportunity__c == op.Id) {
                            Tender_information__c temptender = new Tender_information__c();
@@ -293,5 +300,401 @@
        }
    }
    //LastBuy 预留产品 lt 20220315 end
//SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy start
// public static void UpdateBidNumber(List<Opportunity> newList, Map<Id, Opportunity> newMap, List<Opportunity> oldList, Map<Id, Opportunity> oldMap){
//     List<Id> OpportunityIdList = new List<Id>();
//     Boolean flag = true;
//     for (Opportunity opp : newList) {
//         OpportunityIdList.add(opp.Id);
//         Opportunity oldopp = oldMap == null? null : oldMap.get(opp.Id);
//         if(oldopp==null){
//             if(opp.NumberOfBids__c!=null||opp.BidWinningNumber__c!=null){
//                 flag = true;
//             }
//         }else{
//             if(opp.NumberOfBids__c!=oldopp.NumberOfBids__c||opp.NumberOfBids__c!=oldopp.NumberOfBids__c){
//                 flag = true;
//             }
//         }
//     }
//     system.debug('newList+++'+newList);
//     system.debug('oldList+++'+oldList);
//     if(flag){
//         List<Tender_Opportunity_Link__c> TenderOpportunityLinkList = [select Tender_information__c from Tender_Opportunity_Link__c where Opportunity__c in:OpportunityIdList];
//         Set<Id> enderOpportunityId = new Set<Id>();
//         if(TenderOpportunityLinkList.size()>0){
//             for (Tender_Opportunity_Link__c TenderOpportunity : TenderOpportunityLinkList) {
//                 enderOpportunityId.add(TenderOpportunity.Tender_information__c);
//             }
//         }
//         system.debug('TenderOpportunityLinkList+++'+TenderOpportunityLinkList);
//         List<Tender_Opportunity_Link__c> TenderOpportunityLinkList2 = [select Tender_information__c,Opportunity__r.NumberOfBids__c,Opportunity__r.BidWinningNumber__c from Tender_Opportunity_Link__c where Tender_information__c in:enderOpportunityId];
//         Map<String,Tender_information__c> TenderinformationMap = new Map<String,Tender_information__c>();
//         system.debug('TenderOpportunityLinkList2+++'+TenderOpportunityLinkList2);
//         if(TenderOpportunityLinkList2.size()>0){
//             for(Tender_Opportunity_Link__c TenderOpportunity2 :TenderOpportunityLinkList2){
//                     if(TenderinformationMap.containsKey(TenderOpportunity2.Tender_information__c)){
//                         Tender_information__c Tender_informationvalue = new Tender_information__c();
//                         Tender_informationvalue = TenderinformationMap.get(TenderOpportunity2.Tender_information__c);
//                         Tender_informationvalue.NumberOfBids__c=Tender_informationvalue.NumberOfBids__c+TenderOpportunity2.Opportunity__r.NumberOfBids__c;
//                         Tender_informationvalue.BidWinningNumber__c=Tender_informationvalue.BidWinningNumber__c+TenderOpportunity2.Opportunity__r.BidWinningNumber__c;
//                         TenderinformationMap.put(TenderOpportunity2.Tender_information__c, Tender_informationvalue);
//                     }else{
//                         Tender_information__c Tender_informationvalue = new Tender_information__c();
//                         Tender_informationvalue.Id=TenderOpportunity2.Tender_information__c;
//                         Tender_informationvalue.NumberOfBids__c=TenderOpportunity2.Opportunity__r.NumberOfBids__c;
//                         Tender_informationvalue.BidWinningNumber__c=TenderOpportunity2.Opportunity__r.BidWinningNumber__c;
//                         TenderinformationMap.put(TenderOpportunity2.Tender_information__c, Tender_informationvalue);
//                     }
//             }
//         }
//         List<Tender_information__c> Tender_informationList = new List<Tender_information__c>();
//         for (Tender_information__c value : TenderinformationMap.values()) {
//             Tender_informationList.add(value);
//         }
//         system.debug('Tender_informationList+++'+Tender_informationList);
//         update Tender_informationList;
//     }
// }
//SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy end
    //add 询价跟进任务开发 - 3.创建失单任务 sx 20220617 start
    //询价中标结果确认竞争对手中标时实时创建失单任务
    public static void createTaskByOppConfirmationofAward(List<Opportunity> newList, Map<Id, Opportunity> newMap, List<Opportunity> oldList, Map<Id, Opportunity> oldMap){
        if (!isFirst) {
            return;
        }
        Set<Id> oppoIds = new Set<Id>();
        for(Opportunity op : newList){
            Opportunity oldopp =  oldMap.get(op.Id);
            //询价中标结果确认竞争对手中标时实时创建失单任务 且 询价状态1等于询价
            if (oldopp.ConfirmationofAward__c != '竞争对手中标' && op.ConfirmationofAward__c == '竞争对手中标' && op.StageName__c == '询价' && op.LeakageNumber__c !=1){
                oppoIds.add(op.Id);
            }
        }
        if (!oppoIds.isEmpty()) {
            // 有效失单状态一览
            List<String> validStatus = new List<String>{'申请中', '提交', '批准'};
            // 询价失单/取消报告查询
            List<Lost_cancel_report__c> lostCancelReportList = [SELECT Id, Opportunity__c from Lost_cancel_report__c WHERE Opportunity__c in :oppoIds and Report_Status__c in: validStatus];
            //<询价Id, 失单报告>
            Map<String, Lost_cancel_report__c> lostCancelReportMap = new Map<String, Lost_cancel_report__c>();
            for(Lost_cancel_report__c lcr : lostCancelReportList){
                if (!lostCancelReportMap.isEmpty() && lostCancelReportMap.containsKey(lcr.Opportunity__c)) {
                    // no action
                } else {
                    lostCancelReportMap.put(lcr.Opportunity__c, lcr);
                }
            }
            List<Task__c> insTaskList = new List<Task__c>();
            // 定义需要更新的询价任务
            List<Opportunity> updateOpportunity = new List<Opportunity>();
            // 记录类型:失单报告任务
            List<RecordType> recordTypes = [select Id from RecordType where IsActive = true and SobjectType = 'task__c' and DeveloperName = 'LoseListTask'];
            Id loseListTask_TaskId = recordTypes.get(0).Id;
            //String taskName = '';
            for(Opportunity opp : newList) {
                //没有已提交的失单报告
                if(!lostCancelReportMap.containsKey(opp.Id) && oppoIds.contains(opp.Id)) {
                    //创建失单任务提醒
                    Task__c tempTask = new Task__c();
                    tempTask.RecordTypeId = loseListTask_TaskId;
                    tempTask.taskDifferent__c = '被动任务';
                    tempTask.taskStatus__c = '02 接受';       //任务状态2
                    tempTask.assignee__c = opp.OwnerId;    //被分配者
                    tempTask.account__c = opp.AccountId;
                    tempTask.Name = '失单结果确认:' + opp.Opportunity_No__c;
                    tempTask.OwnerId = opp.OwnerId;   //所有人
                    tempTask.OpportunityId__c = opp.Id;
                    tempTask.ConfirmDate__c = Date.today();
                    insTaskList.add(tempTask);
                    //更新询价  Task_createTime__c
                    Opportunity uopp  = new Opportunity();
                    uopp.Id = opp.Id;
                    uopp.LostTask_createTime__c  = Date.today();
                    updateOpportunity.add(uopp);
                }
            }
            if (!insTaskList.isEmpty()) {
                insert insTaskList;
            }
            if (!updateOpportunity.isEmpty()) {
                update updateOpportunity;
            }
        }
        isFirst = false;
    }
    //add 询价跟进任务开发 - 3.创建失单任务 sx 20220617 end
    //询价跟进任务开发
    public static void opportunityTasks(List<Opportunity> newList, Map<Id, Opportunity> newMap, List<Opportunity> oldList, Map<Id, Opportunity> oldMap){
        Set<Id> oppoIds = new Set<Id>();
        for(Opportunity op : newList){
            Opportunity oldopp =  oldMap.get(op.Id);
            //询价中标结果确认竞争对手中标时实时创建失单任务 且 询价状态1等于询价
            if (oldopp.ConfirmationofAward__c != 'OLY中标' && op.ConfirmationofAward__c == 'OLY中标' && op.StageName__c == '询价'){
                oppoIds.add(op.Id);
                //确认中标结果时间 创建任务时间  20220629 sx
                op.ConfirmationofAward_createTime__c = Date.today();
                if(op.Task_createTime__c!=null){
                    //是否按时确认:3个工作日内按时1,不按时0
                    String inttemp = CalendarUtil.getWorkDayNum(String.valueOf(op.Task_createTime__c), String.valueOf(op.ConfirmationofAward_createTime__c));
                    op.Is_ConfirmationofAward__c = Integer.valueOf(inttemp) > 3 ? 0 : 1;
                }
            }
            //20220628会议新需求  对手中标 7.中标日清空
            if(oldopp.ConfirmationofAward__c != '竞争对手中标' && op.ConfirmationofAward__c == '竞争对手中标'){
                op.Closing_Bid_Date__c = null;
                op.ConfirmationofAward_createTime__c = Date.today();
                if(op.Task_createTime__c!=null){
                    //是否按时确认:3个工作日内按时1,不按时0
                    String inttemp = CalendarUtil.getWorkDayNum(String.valueOf(op.Task_createTime__c), String.valueOf(op.ConfirmationofAward_createTime__c));
                    op.Is_ConfirmationofAward__c = Integer.valueOf(inttemp) > 3 ? 0 : 1;
                }
            }
        }
        if(!oppoIds.isEmpty()){
            list<Tender_Opportunity_Link__c> toppLinkList = [Select Id, Opportunity__c, Tender_information__c,Tender_information__r.ResultDate__c FROM Tender_Opportunity_Link__c WHERE Opportunity__c in :oppoIds];
            Map<String, Tender_Opportunity_Link__c> toopLinkMap = new Map<String, Tender_Opportunity_Link__c>();
            for(Tender_Opportunity_Link__c tol : toppLinkList){
                toopLinkMap.put(tol.Opportunity__c, tol);
            }
            for (String key : toopLinkMap.keySet()) {
                Opportunity oppoTemp = newMap.get(key);
                //20220628会议新需求  OLY中标 7.中标日(结果记录日)= 招标项目.结果记录日
                oppoTemp.Closing_Bid_Date__c = toopLinkMap.get(key).Tender_information__r.ResultDate__c;
                System.debug('============'+toopLinkMap.get(key).Tender_information__r.ResultDate__c);
                //是否按时确认:3个工作日内按时1,不按时0
                //String inttemp = CalendarUtil.getWorkDayNum(String.valueOf(oppoTemp.Task_createTime__c), String.valueOf(oppoTemp.ConfirmationofAward_createTime__c));
                //oppoTemp.Is_ConfirmationofAward__c = Integer.valueOf(inttemp) > 3 ? 0 : 1;
            }
        }
        Integer i = 0;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
    }
}