游畅
2022-11-24 b81b49dd7cb35010f950923ec6ac9eb28b6a5709
20221124询价状态2 更新
4个文件已修改
1053 ■■■■ 已修改文件
force-app/main/default/classes/OpportunityService.cls 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/TenderInformationHandler.cls 641 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/TenderOpportunityLinkHandler.cls 328 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/triggers/OpportunityHpDeptUpd.trigger 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/OpportunityService.cls
@@ -53,6 +53,14 @@
    if(IdStr != null && String.isNotBlank(IdStr)) {
      sql += ' and id not in (select Opportunity__c from Tender_Opportunity_Link__c where Tender_information__c = :IdStr) ';
    }
    // 20221014 ljh SWAG-CK28WT add start
    String proId = UserInfo.getProfileId();
    String p_2M4 = System.Label.ProfileId_2M4;
    if(proId.substring(0,15) == p_2M4.substring(0,15)){
       sql += ' AND OwnerId =\''+UserInfo.getUserId()+'\'';
    }
    System.debug('sql:'+sql);
    // 20221014 ljh SWAG-CK28WT add end
    sql += '  limit 50';
    List<Opportunity> arrays = Database.query(sql);
    return JSON.serialize(arrays); 
@@ -103,6 +111,14 @@
    {
      sql += ' and Hospital__c in :hospital';
    }
    // 20221014 ljh SWAG-CK28WT add start
    String proId = UserInfo.getProfileId();
    String p_2M4 = System.Label.ProfileId_2M4;
    if(proId.substring(0,15) == p_2M4.substring(0,15)){
       sql += ' AND OwnerId =\''+UserInfo.getUserId()+'\'';
    }
    System.debug('sql:'+sql);
    // 20221014 ljh SWAG-CK28WT add end
    sql += '  limit 50';
    List<Opportunity> arrays = Database.query(sql);
@@ -217,8 +233,11 @@
      sql += 'Hospital1__c, ';
      sql += 'Hospital2__c, ';
      sql += 'Hospital3__c, ';
      sql += 'Hospital4__c ';
      sql += 'FROM Tender_information__c  WHERE Id = :BiddingId';
      sql += 'Hospital4__c, ';
      sql += 'publicDate__c, ';// 20221114 ljh SWAG-CKL5UC
      sql += 'Tender_Order__c, ';  //20220620 you SWAG-CFD4SU
      sql += 'subInfoType__c ';  //20220718 you 招标任务
      sql += 'FROM Tender_information__c  WHERE Id = :BiddingId order by Tender_Order__c desc,relativeTime_F__c desc'; //20220620 you SWAG-CFD4SU 增加 order by
      List<Tender_information__c> arrays = Database.query(sql);
      Tender_information__c tender = arrays[0];
      
@@ -270,6 +289,7 @@
      // }
      // 更新询价
      List<Opportunity> upd_opps = new List<Opportunity>();
      List<Opportunity> upd_opps1 = new List<Opportunity>();
      List<String> owners = new List<String>();
      // 插入link
      if (all_selected_list.size() > 0) {
@@ -297,11 +317,15 @@
        }
        // 恢复trigger标记
        StaticParameter.EscapeTOLinkTrigger = false;
        //20220620 you SWAG-CFD4SU 改造 start  始终显示最新的 ① 3:结果,② 4:变更,③ 2:公告,④ 1:预告,⑤ 5:其他
        List<String> tenIds = new List<String>();//20220718 you 招标任务
        system.debug('opportunityservicetest'+oppIds);
        if (oppIds.size() > 0) {
          List<Opportunity> wait_upd_opps = [select id, Bidding_Project_Name_Bid__c, Bidding_Project_Name_Bid__r.InfoType__c from Opportunity where id in :oppIds and Bidding_Project_Name_Bid__r.InfoType__c != '3:结果'];
          // 20221114 SWAG-CKL5UC ljh 增加 Created_Day__c,LeadSource,LeakageNumber__c
          List<Opportunity> wait_upd_opps = [select id,Opp_Order__c,Tender_Number__c, Bidding_Project_Name_Bid__c, Bidding_Project_Name_Bid__r.InfoType__c,Created_Day__c,LeadSource,LeakageNumber__c from Opportunity where id in :oppIds ];//and Bidding_Project_Name_Bid__r.InfoType__c != '3:结果'];
          if (wait_upd_opps != null && wait_upd_opps.size() > 0) {
            for (Opportunity opp : wait_upd_opps) {
              /**
              if (opp.Bidding_Project_Name_Bid__c == null || String.isBlank(opp.Bidding_Project_Name_Bid__c)) {
                opp.Bidding_Project_Name_Bid__c = tender.Id;
                opp.TenderBeginDate_Text__c = tender.TenderBeginTime__c;
@@ -310,13 +334,52 @@
                opp.Bidding_Project_Name_Bid__c = tender.Id;
                upd_opps.add(opp);
              }
              **/
              if(opp.Opp_Order__c <= tender.Tender_Order__c){
                opp.Bidding_Project_Name_Bid__c =tender.Id;
                //opp.TenderBeginDate_Text__c = tender.TenderDate__c;//更改询价2时修改这个字段,引用超20,tender.TenderBeginTime__c;
                upd_opps.add(opp);
                //20220715 you 招标项目 start
                if(String.isNotBlank(tender.InfoType__c) && tender.InfoType__c=='3:结果' && String.isNotBlank(tender.subInfoType__c) && (tender.subInfoType__c=='3-5:中标通知' || tender.subInfoType__c=='3-6:合同公告')){
                  tenIds.add(opp.id); //符合条件生成任务
                }
                //20220715 you 招标项目 end
                break;
              }
            }
            //20220829 you SWAG-CHL67J start
            for (Opportunity opp : wait_upd_opps) {
              Integer returncount =0;
              if(String.isNotBlank(tender.InfoType__c) && tender.InfoType__c!='1:预告' && String.isNotBlank(tender.subInfoType__c) && tender.subInfoType__c!='3-1:废标公告' && tender.subInfoType__c!='3-2:流标公告'){
                  returncount += 1;
                }
              opp.Tender_Number__c = returncount;
              // 20221114 ljh SWAG-CKL5UC start
              if(opp.LeakageNumber__c != 1 && tender.publicDate__c != null && String.isNotBlank(opp.LeadSource) && opp.LeadSource == '招标网' && opp.Created_Day__c > tender.publicDate__c){
                opp.LeakageNumber__c = 1;
              }
              // 20221114 ljh SWAG-CKL5UC start
              upd_opps1.add(opp);
            }
            //20220829 you SWAG-CHL67J end
          }
        }
        if (upd_opps1.size() > 0) {
          update upd_opps1;
        }
        //20220620 you SWAG-CFD4SU 改造 end
        // 更新询价上的招标项目
        if (upd_opps.size() > 0) {
          update upd_opps;
        }
         //20220718 you 招标任务 start
        if (tenIds !=null && tenIds.size() > 0) {
            Database.executeBatch(new TenderResultConfirmTaskBatch(tenIds));
          }
          //20220718 you 招标任务 end
      }
      // 查询招标数量并更新
force-app/main/default/classes/TenderInformationHandler.cls
@@ -41,32 +41,104 @@
    protected override void beforeUpdate() {
        //反逻辑删除 fxk
        changeRelateOppDate();
        updateTenDel();
        AssignValueToAssistant();
        if (!StaticParameter.EscapeOtherUpdateTenOwner) {
            updateTenOwner();
        }
        // 20221011 ljh  SWAG-CK28WT start
        updateTenOwnerJC();
        // 20221011 ljh  SWAG-CK28WT end
        //20220804 you 询价任务
        updateOppotunityBeforeUpdate();
    }
    protected override void afterInsert() {
        // 根据上面赋值的GI、SP助理,行政窗口,备品窗口,更新共享,共享原因不一样
        addShare();
        sednMessage();
        //sednMessage(); 20220729 you 招标项目 取消发送邮件通知
        // updateTenOwner();
    }
    protected override void afterUpdate() {
        addShare();
        sednMessage();
        addShare();
        //sednMessage(); 20220729 you 招标项目 取消发送邮件通知
        updateWin();
        // 中标任务 废标流标时清空中标日
        clearConfirmationofAward();
        //2022-3-29 yjk SWAG-CCL6R7
        updateOpportunity();
        //updateOpportunity();//2022-5-18 yjk XLIU-CEJ38N 注释掉
    }
    //修改项目阶段,由 结果变为其他,,相关任务取消
    public void updateOppotunityBeforeUpdate() {
        Set<String> Tenids = new Set<String>();//招标项目id,查询link
        Set<String> oppTens = new Set<String>();//招标项目id,查询link
        List<String> oppIds = new List<String>();//询价
        // 获得要更新的询价
        for (Tender_information__c record: newList) {
           if ( ( ('3-5:中标通知'.equals((oldMap.get(record.Id).subInfoType__c)) || '3-6:合同公告'.equals((oldMap.get(record.Id).subInfoType__c)) ) && ('3-1:废标公告'.equals(record.subInfoType__c)  || '3-2:流标公告'.equals(record.subInfoType__c) )) || (!'3:结果'.equals(record.InfoType__c) && '3:结果'.equals((oldMap.get(record.Id).InfoType__c)))) {
                Tenids.add(record.id);
            }
        }
        Map<String,String> InfoTypeMap = new Map<String,String>(); //判断是否是因为中标修改得
        if(null!=Tenids && Tenids.size()>0){
            List<Tender_Opportunity_Link__c> TenOppLinkList = [select id, Tender_information__c,Tender_information__r.InfoType__c, Opportunity__c from Tender_Opportunity_Link__c where Tender_information__c in :Tenids];
            if(null!=TenOppLinkList && TenOppLinkList.size()>0){
                for(Tender_Opportunity_Link__c topl :TenOppLinkList){
                    String oppid =String.valueOf(topl.Opportunity__c);
                    String tenid =String.valueOf(topl.Tender_information__c);
                    oppTens.add(oppid.subString(0,15)+tenid.subString(0,15));
                    if (!oppIds.contains(topl.Opportunity__c)) {
                        oppIds.add(topl.Opportunity__c);
                    }
                    if(!'3:结果'.equals(topl.Tender_information__r.InfoType__c)){
                       InfoTypeMap.put(topl.Opportunity__c,topl.Tender_information__c);
                    }
                }
            }
        }
        if (null!=oppTens && oppTens.size()>0) {
          List<Opportunity> opportunities = [select id, Bidding_Project_Name_Bid__c, Opp_Order__c from Opportunity where id in :oppIds];
           List<task__c> taskList = [select id,taskStatus__c,Tender_information_Task__c,OpportunityId__c from task__c where (RecordType.Name ='失单报告任务' and OpportunityId__c in:oppIds) or (RecordType.Name ='中标结果确认' and Opp_Tender__c in :oppTens)];
            for(task__c tsk : taskList){
                tsk.taskStatus__c = '04 取消';
                tsk.cancelDate__c = date.today();
                if(null!=InfoTypeMap && InfoTypeMap.containsKey(tsk.OpportunityId__c)){
                   tsk.cancelReasonSelect__c = '修改项目阶段';
                }else{
                   tsk.cancelReasonSelect__c = '流标/废标';
                }
            }
             update taskList;
            if(taskList.size() > 0){
                for (task__c tlink : taskList) {
                    for (Opportunity opp : opportunities) {
                        if (opp.Id == tlink.OpportunityId__c) {
                           //20220718 you 询价任务 start
                            opp.ConfirmationofAward__c = null;
                            opp.Task_createTime__c = null;
                            opp.ConfirmationofAward_createTime__c =null;
                            opp.LostTask_comfirmTime__c =null;
                            opp.Is_ConfirmationofAward__c =null;
                            opp.LostTask_createTime__c =null;
                            opp.Closing_Bid_Date__c = null;
                            //20220718 you 询价任务 end
                       }
                    }
                }
            }
            update opportunities;
        }
    }
    //20220718 you 询价任务 end
    // 20221027 updateOpportunity() 全文搜索过 没有调用的,方法引用已经注释,覆盖率不够方法体也注释(SWAG-CKL5UC),
    //2022-3-29 yjk SWAG-CCL6R7
    private void updateOpportunity(){
    /*private void updateOpportunity(){
        for(Tender_information__c newOne : newList){
            Tender_information__c oldOne = oldMap.get(newOne.id);
            if(oldOne.ResultDate__c == null && newOne.ResultDate__c != null){
@@ -79,142 +151,142 @@
                }
            }
        }
    }
    }*/
    //20220729 you
    //public void sednMessage() {
    //    //规则条件
    //    //ISCHANGED(InfoType__c) && Text(InfoType__c) = '3:结果' && (Text(IsBid__c) = '是' || ( Text(IsBid__c) = '否' && OpportunityNum__c != null && OpportunityNum__c > 0) )
    //    // 1)没有关联询价,确认相关性,那么就发给GI和SP助理;
    //    // 2)关联询价后,询价的所有人、项目所有人,GI和SP助理,收邮件;
    //    //关联询价 发给询价所有人 招标项目所有人
    //    //没有关联询价并且做了相关性确认 发给招标项目所有人
    public void sednMessage() {
        //规则条件
        //ISCHANGED(InfoType__c) && Text(InfoType__c) = '3:结果' && (Text(IsBid__c) = '是' || ( Text(IsBid__c) = '否' && OpportunityNum__c != null && OpportunityNum__c > 0) )
        // 1)没有关联询价,确认相关性,那么就发给GI和SP助理;
        // 2)关联询价后,询价的所有人、项目所有人,GI和SP助理,收邮件;
        //关联询价 发给询价所有人 招标项目所有人
        //没有关联询价并且做了相关性确认 发给招标项目所有人
    //    //1.判断是否符合大条件 拿到招标id
    //    Set<Id> zbIds = new Set<Id>();
    //    //拿到招标id , 招标所有人 GI/SP助理 的邮件地址
    //    Map<Id, Set<String>> zbOppMap = new Map<Id, Set<String>>();
    //    List<Tender_information__c> tlist = new List<Tender_information__c>();
        //1.判断是否符合大条件 拿到招标id
        Set<Id> zbIds = new Set<Id>();
        //拿到招标id , 招标所有人 GI/SP助理 的邮件地址
        Map<Id, Set<String>> zbOppMap = new Map<Id, Set<String>>();
        List<Tender_information__c> tlist = new List<Tender_information__c>();
    //    for (Tender_information__c ten : newList) {
    //        // if (ten.InfoType__c == '3:结果' &&
    //        //     (ten.IsBid__c == '是' || (ten.IsBid__c == '否' && ten.OpportunityNum__c != null && ten.OpportunityNum__c > 0))
    //        //     && (Trigger.isInsert || (Trigger.isUpdate && oldMap.get(ten.Id).InfoType__c != '3:结果'))) {
    //        //     zbIds.add(ten.Id);
    //        // }
    //        // 判断条件修改
    //        if (ten.InfoType__c == '3:结果' && (Trigger.isInsert || (Trigger.isUpdate && oldMap.get(ten.Id).InfoType__c != '3:结果'))) {
    //            // 如果招标所有人为系统管理员(OlympusSystem)时需要跳过
    //            if (ten.Ownerid != '00510000000gmxH') {
    //                zbIds.add(ten.Id);
    //            }
    //        }
    //    }
    //    if (zbIds.size() > 0) {
    //        tlist = [select Id, GI_assistant__r.Email, SP_assistant__r.Email, Hospital__r.Name, BudgetAmount__c, Name, department__r.Name, OpenBidingTime__c, Owner.Alias, Owner.Email from Tender_information__c where id in :zbIds];
    //        for (Tender_information__c ten : tlist) {
    //            if (!zbOppMap.containsKey(ten.Id)) {
    //                zbOppMap.put(ten.Id, new Set<String>());
    //            }
    //            zbOppMap.get(ten.Id).add(ten.Owner.Email);
        for (Tender_information__c ten : newList) {
            // if (ten.InfoType__c == '3:结果' &&
            //     (ten.IsBid__c == '是' || (ten.IsBid__c == '否' && ten.OpportunityNum__c != null && ten.OpportunityNum__c > 0))
            //     && (Trigger.isInsert || (Trigger.isUpdate && oldMap.get(ten.Id).InfoType__c != '3:结果'))) {
            //     zbIds.add(ten.Id);
            // }
            // 判断条件修改
            if (ten.InfoType__c == '3:结果' && (Trigger.isInsert || (Trigger.isUpdate && oldMap.get(ten.Id).InfoType__c != '3:结果'))) {
                // 如果招标所有人为系统管理员(OlympusSystem)时需要跳过
                if (ten.Id != '00510000000gmxH') {
                    zbIds.add(ten.Id);
                }
            }
        }
        if (zbIds.size() > 0) {
            tlist = [select Id, GI_assistant__r.Email, SP_assistant__r.Email, Hospital__r.Name, BudgetAmount__c, Name, department__r.Name, OpenBidingTime__c, Owner.Alias, Owner.Email from Tender_information__c where id in :zbIds];
            for (Tender_information__c ten : tlist) {
                if (!zbOppMap.containsKey(ten.Id)) {
                    zbOppMap.put(ten.Id, new Set<String>());
                }
                zbOppMap.get(ten.Id).add(ten.Owner.Email);
    //        }
    //        //取得询价
    //        // 招标-询价关联修改 20210817 start
    //        // List<Opportunity> oppList = new List<Opportunity>();
    //        // oppList = [select id,Owner.Email,Bidding_Project_Name_Bid__c,Bidding_Project_Name_Bid__r.owner.Email from Opportunity where Bidding_Project_Name_Bid__c in :zbIds];
    //        // if (oppList.size() > 0) {
    //        //     for (Opportunity opp : oppList) {
    //        //         // 能走到这说明 询价的所有人、项目所有人 也得发邮件
    //        //         if (!zbOppMap.containsKey(opp.Bidding_Project_Name_Bid__c)) {
    //        //             zbOppMap.put(opp.Bidding_Project_Name_Bid__c, new Set<String>());
    //        //         }
    //        //         zbOppMap.get(opp.Bidding_Project_Name_Bid__c).add(opp.Owner.Email);
    //        //         // zbOppMap.get(opp.Bidding_Project_Name_Bid__c).add(opp.Bidding_Project_Name_Bid__r.owner.Email);
    //        //     }
    //        // }
    //        List<Tender_Opportunity_Link__c> link_list = [select id, Tender_information__c, Opportunity__r.Owner.Email from Tender_Opportunity_Link__c where Tender_information__c in :zbIds];
    //        if (link_list != null && link_list.size() > 0) {
    //            for (Tender_Opportunity_Link__c link : link_list) {
    //                // 能走到这说明 询价的所有人、项目所有人 也得发邮件
    //                if (!zbOppMap.containsKey(link.Tender_information__c)) {
    //                    zbOppMap.put(link.Tender_information__c, new Set<String>());
    //                }
    //                zbOppMap.get(link.Tender_information__c).add(link.Opportunity__r.Owner.Email);
    //            }
    //        }
    //        // 招标-询价关联修改 20210817 end
    //    }
            }
            //取得询价
            // 招标-询价关联修改 20210817 start
            // List<Opportunity> oppList = new List<Opportunity>();
            // oppList = [select id,Owner.Email,Bidding_Project_Name_Bid__c,Bidding_Project_Name_Bid__r.owner.Email from Opportunity where Bidding_Project_Name_Bid__c in :zbIds];
            // if (oppList.size() > 0) {
            //     for (Opportunity opp : oppList) {
            //         // 能走到这说明 询价的所有人、项目所有人 也得发邮件
            //         if (!zbOppMap.containsKey(opp.Bidding_Project_Name_Bid__c)) {
            //             zbOppMap.put(opp.Bidding_Project_Name_Bid__c, new Set<String>());
            //         }
            //         zbOppMap.get(opp.Bidding_Project_Name_Bid__c).add(opp.Owner.Email);
            //         // zbOppMap.get(opp.Bidding_Project_Name_Bid__c).add(opp.Bidding_Project_Name_Bid__r.owner.Email);
            //     }
            // }
            List<Tender_Opportunity_Link__c> link_list = [select id, Tender_information__c, Opportunity__r.Owner.Email from Tender_Opportunity_Link__c where Tender_information__c in :zbIds];
            if (link_list != null && link_list.size() > 0) {
                for (Tender_Opportunity_Link__c link : link_list) {
                    // 能走到这说明 询价的所有人、项目所有人 也得发邮件
                    if (!zbOppMap.containsKey(link.Tender_information__c)) {
                        zbOppMap.put(link.Tender_information__c, new Set<String>());
                    }
                    zbOppMap.get(link.Tender_information__c).add(link.Opportunity__r.Owner.Email);
                }
            }
            // 招标-询价关联修改 20210817 end
        }
    //    if (zbOppMap.size() > 0) {
    //        if (tlist.size() > 0) {
    //            List<Messaging.SingleEmailMessage> sendMails = new List<Messaging.SingleEmailMessage>();
        if (zbOppMap.size() > 0) {
            if (tlist.size() > 0) {
                List<Messaging.SingleEmailMessage> sendMails = new List<Messaging.SingleEmailMessage>();
    //            for (Tender_information__c ten : tlist) {
    //                if (zbOppMap.containsKey(ten.Id)) {
    //                    String body = '';
    //                    String title = '';
    //                    String BudgetAmount = ten.BudgetAmount__c == null ? '' : ten.BudgetAmount__c + '';
    //                    String HospitalName = ten.Hospital__c == null ? '' : ten.Hospital__r.Name;
    //                    String departmentName = ten.department__c == null ? '' : ten.department__r.Name;
    //                    String OpenBidingTime = ten.OpenBidingTime__c == null ? '' : ten.OpenBidingTime__c.format();
                for (Tender_information__c ten : tlist) {
                    if (zbOppMap.containsKey(ten.Id)) {
                        String body = '';
                        String title = '';
                        String BudgetAmount = ten.BudgetAmount__c == null ? '' : ten.BudgetAmount__c + '';
                        String HospitalName = ten.Hospital__c == null ? '' : ten.Hospital__r.Name;
                        String departmentName = ten.department__c == null ? '' : ten.department__r.Name;
                        String OpenBidingTime = ten.OpenBidingTime__c == null ? '' : ten.OpenBidingTime__c.format();
    //                    title = '中标结果:' + ten.Hospital__r.Name + ' 预算金额' + BudgetAmount + '已有中标结果请确认';
                        title = '中标结果:' + ten.Hospital__r.Name + ' 预算金额' + BudgetAmount + '已有中标结果请确认';
    //                    body += '项目名:' + ten.Name + '<br/>';
    //                    body += '预算金额:' + BudgetAmount + '<br/>';
    //                    body += '医院:' + HospitalName + '<br/>';
    //                    // body += '战略科室:'+departmentName + '<br/>';
    //                    body += '中标日:' + OpenBidingTime + '<br/>';
    //                    body += '主担当:' + ten.Owner.Alias + '<br/>';
    //                    body += '招投标链接: <br/>';
    //                    body += '<a href="' + URL.getSalesforceBaseUrl().toExternalForm() + '/' + ten.Id  + '">' + URL.getSalesforceBaseUrl().toExternalForm() + '/' + ten.Id + '</a><br/>';
    //                    // body += '收件人: '+zbOppMap.get(ten.Id);
                        body += '项目名:' + ten.Name + '<br/>';
                        body += '预算金额:' + BudgetAmount + '<br/>';
                        body += '医院:' + HospitalName + '<br/>';
                        // body += '战略科室:'+departmentName + '<br/>';
                        body += '中标日:' + OpenBidingTime + '<br/>';
                        body += '主担当:' + ten.Owner.Alias + '<br/>';
                        body += '招投标链接: <br/>';
                        body += '<a href="' + URL.getSalesforceBaseUrl().toExternalForm() + '/' + ten.Id  + '">' + URL.getSalesforceBaseUrl().toExternalForm() + '/' + ten.Id + '</a><br/>';
                        // body += '收件人: '+zbOppMap.get(ten.Id);
    //                    List<String> toMailList = new List<String>();
    //                    // List<String> toccList = new List<String>();
    //                    // emas.add(UserInfo.getUserEmail());
    //                    //收信人
    //                    toMailList.addAll(zbOppMap.get(ten.Id));
    //                    // if (toMailList.contains(null)) {
    //                    // toMailList.remove(null);
    //                    // }
    //                    // toMailList.add('rentongxiao@prec-tech.com');
    //                    //抄送人
    //                    // toccList.add('gzw@prec-tech.com');
    //                    // toccList.add('rentongxiao@prec-tech.com');
    //                    Messaging.SingleEmailMessage messageNEW = new Messaging.SingleEmailMessage();
    //                    messageNEW.subject = title;
    //                    //messageNEW.plainTextBody = body;
    //                    messageNEW.htmlBody = body;
    //                    messageNEW.setCharset('UTF-8');
    //                    messageNEW.toAddresses = toMailList;
    //                    // messageNEW.ccAddresses = toccList;
    //                    sendMails.add(messageNEW);
    //                }
    //            }
                        List<String> toMailList = new List<String>();
                        // List<String> toccList = new List<String>();
                        // emas.add(UserInfo.getUserEmail());
                        //收信人
                        toMailList.addAll(zbOppMap.get(ten.Id));
                        // if (toMailList.contains(null)) {
                        // toMailList.remove(null);
                        // }
                        // toMailList.add('rentongxiao@prec-tech.com');
                        //抄送人
                        // toccList.add('gzw@prec-tech.com');
                        // toccList.add('rentongxiao@prec-tech.com');
                        Messaging.SingleEmailMessage messageNEW = new Messaging.SingleEmailMessage();
                        messageNEW.subject = title;
                        //messageNEW.plainTextBody = body;
                        messageNEW.htmlBody = body;
                        messageNEW.setCharset('UTF-8');
                        messageNEW.toAddresses = toMailList;
                        // messageNEW.ccAddresses = toccList;
                        sendMails.add(messageNEW);
                    }
                }
                if (sendMails.size() > 0) {
                    for (Messaging.SingleEmailMessage mc : sendMails) {
                        List<Messaging.SingleEmailMessage> tempsendMails = new List<Messaging.SingleEmailMessage>();
                        tempsendMails.add(mc);
                        Messaging.SendEmailResult[] results = null;
                        if (!NFMUtil.isSandbox()) {
                            results = messaging.sendEmail(tempsendMails);
                        }
                        if (results != null && results.size() > 0) {
                            for (Integer i = 0; i < results.size(); i++) {
                                if (results[i].success == false) {
                                    System.debug('邮件:::' + mc.getSubject() + '发送失败');
                                } else {
                                    System.debug('邮件:::' + mc.getSubject() + '发送成功');
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    //            if (sendMails.size() > 0) {
    //                for (Messaging.SingleEmailMessage mc : sendMails) {
    //                    List<Messaging.SingleEmailMessage> tempsendMails = new List<Messaging.SingleEmailMessage>();
    //                    tempsendMails.add(mc);
    //                    Messaging.SendEmailResult[] results = null;
    //                    if (!NFMUtil.isSandbox()) {
    //                        results = messaging.sendEmail(tempsendMails);
    //                    }
    //                    if (results != null && results.size() > 0) {
    //                        for (Integer i = 0; i < results.size(); i++) {
    //                            if (results[i].success == false) {
    //                                System.debug('邮件:::' + mc.getSubject() + '发送失败');
    //                            } else {
    //                                System.debug('邮件:::' + mc.getSubject() + '发送成功');
    //                            }
    //                        }
    //                    }
    //                }
    //            }
    //        }
    //    }
    //}
@@ -392,6 +464,12 @@
        //取值顺序是:所有人,之后是gi助理,接下来是sp助理,接下来是战略科室所有人 所以倒着来
        List<Tender_information__Share> tenShareList = new List<Tender_information__Share>();
        for (Tender_information__c tenc : newList) {
            // 20221013 ljh SWAG-CK28WT start
            // 集采项目 后续共享不需要,只把原来的共享删除
            if(tenc.CentralizedProject__c){
                continue;
            }
            // 20221013 ljh SWAG-CK28WT start
            //一个map为 针对一条招投标计划的共享
            Map<Id, Tender_information__Share> sharemap = new Map<Id, Tender_information__Share>();
            //1.先设置 医院担当的共享
@@ -521,7 +599,7 @@
            tenShareList.addAll(sharemap.values());
        }
        //现在用的是全删全加的方法,没有再判断是否发生改变了
        //删除
        List<Tender_information__Share> beforeShareList =
@@ -538,6 +616,9 @@
        }
    }
    /**
     * 2022-04-03 增加判断 当用户无效时也跳过设置
     */
    public void AssignValueToAssistant() {
        //根据ocsm管理省的助理设置当前招投标项目的gi/sp助理
        Map<String, OCM_Management_Province__c> mpMap = new Map<String, OCM_Management_Province__c>();
@@ -545,7 +626,6 @@
        for (OCM_Management_Province__c mp : [SELECT id, Name, GI_assistant__c, SP_assistant__c, SP_assistant__r.IsActive, GI_assistant__r.IsActive, Window2__c, Window2__r.IsActive, Admin_assistant3__c, Admin_assistant3__r.IsActive, TenderAssistant1__c, TenderAssistant1__r.IsActive, TenderAssistant2__c, TenderAssistant2__r.IsActive, Window1__c, Window1__r.IsActive FROM OCM_Management_Province__c]) {
            mpMap.put(mp.Name, mp);
        }
        //设置GI/SP助理  行政助理、备品窗口
        //直接设置 信息负责人(助理) 为GI助理
        for (Tender_information__c info : newList) {
@@ -568,26 +648,30 @@
                            info.GI_assistant__c = ocm.GI_assistant__c;
                        }
                        if (info.InfoOwner__c != ocm.GI_assistant__c) {
                            info.InfoOwner__c = ocm.GI_assistant__c;
                            if(info.CentralizedProject__c == false){ // 20221012 ljh SWAG-CK28WT 添加的if
                                info.InfoOwner__c = ocm.GI_assistant__c;
                            }
                        }
                    }
                    // 增加GI助理为空时的处理,清空招标项目的GI助理和信息负责人(助理) 20210813
                    else if (ocm.GI_assistant__c == null) {
                    else if (ocm.GI_assistant__c == null || !ocm.GI_assistant__r.IsActive) {
                        info.GI_assistant__c = null;
                        info.InfoOwner__c = ocm.GI_assistant__c;
                        if(info.CentralizedProject__c == false){ // 20221012 ljh SWAG-CK28WT 添加的if
                            info.InfoOwner__c = null;
                        }
                    }
                    if (ocm.SP_assistant__r.IsActive && info.SP_assistant__c != ocm.SP_assistant__c) {
                        info.SP_assistant__c = ocm.SP_assistant__c;
                    }
                    // 增加SP助理为空时的处理,清空招标项目的SP助理 20210813
                    else if (ocm.SP_assistant__c == null) {
                    else if (ocm.SP_assistant__c == null || !ocm.GI_assistant__r.IsActive) {
                        info.SP_assistant__c = null;
                    }
                    if (ocm.Window2__r.IsActive && info.Window2__c != ocm.Window2__c) {
                        info.Window2__c = ocm.Window2__c;
                    }
                    // 清空行政窗口 20210813
                    else if (ocm.Window2__c == null) {
                    else if (ocm.Window2__c == null || !ocm.Window2__r.IsActive) {
                        info.Window2__c = null;
                    }
                    //
@@ -599,14 +683,14 @@
                        info.TenderAssistant1__c = ocm.TenderAssistant1__c;
                    }
                    // 清空招标助理1 20210813
                    else if (ocm.TenderAssistant1__c == null) {
                    else if (ocm.TenderAssistant1__c == null || !ocm.TenderAssistant1__r.IsActive) {
                        info.TenderAssistant1__c = null;
                    }
                    if (ocm.TenderAssistant2__r.IsActive && info.TenderAssistant2__c != ocm.TenderAssistant2__c) {
                        info.TenderAssistant2__c = ocm.TenderAssistant2__c;
                    }
                    // 清空招标助理2 20210813
                    else if (ocm.TenderAssistant2__c == null) {
                    else if (ocm.TenderAssistant2__c == null || !ocm.TenderAssistant2__r.IsActive) {
                        info.TenderAssistant2__c = null;
                    }
@@ -615,7 +699,7 @@
                        info.YingyeWindow__c = ocm.Window1__c;
                    }
                    // 清空营业窗口 20210813
                    else if (ocm.Window1__c == null) {
                    else if (ocm.Window1__c == null || !ocm.Window1__r.IsActive) {
                        info.YingyeWindow__c = null;
                    }
                }
@@ -627,12 +711,33 @@
                        || tenDepartList.contains('01210000000QezoAAC')
                        || tenDepartList.contains('01210000000QeztAAC')){
                        System.debug('=====-----'+info.department_selection__c);
                        info.InfoOwner__c = info.SP_assistant__c;
                        if(info.CentralizedProject__c == false){ // 20221012 ljh SWAG-CK28WT 添加的if
                            info.InfoOwner__c = info.SP_assistant__c;
                        }
                    }
                }
                // add 战略科室分类为普外科、泌尿科、妇科、耳鼻喉科时,信息负责人(助理)修改为 SP助理 2021、11、11 fxk end
                // 20221012 ljh SWAG-CK28WT start
                if(info.CentralizedProject__c){
                    // 清除这些人赋值 (就没有权限了)
                    info.GI_assistant__c = null;
                    info.SP_assistant__c = null;
                    info.Window2__c = null;
                    info.TenderAssistant1__c = null;
                    info.TenderAssistant2__c = null;
                    info.YingyeWindow__c = null;
                }
                // 20221012 ljh SWAG-CK28WT end
            }
            // 20221027 ljh SWAG-CKL5UC add start
            // 项目中当结果记录日有值公告记录日为空时,给公告记录日赋值逻辑=结果记录日-15天
            if(info.ResultDate__c != null && info.publicDate__c == null){
                info.publicDate__c = info.ResultDate__c.addDays(-15);
            }
            // 20221027 ljh SWAG-CKL5UC add start
        }
    }
// fxk 2021/8/3 反逻辑删除 Star
    private void updateTenDel() {
@@ -646,44 +751,152 @@
            }
        }
    }
    private void changeRelateOppDate(){
        System.debug(LoggingLevel.INFO, '*** 进入方法: ');
        List<String> oldUserOrGroups = new List<String>();
        Map<Id,Tender_information__c> tOldMap = (Map<Id,Tender_information__c>) Trigger.oldMap;
        Map<Id,Tender_information__c> tNewMap = (Map<Id,Tender_information__c>) Trigger.newMap;
        List<Date> cd = new List<Date>();
        System.debug(LoggingLevel.INFO, '*** cd: ' + cd);
        System.debug(LoggingLevel.INFO, '*** tOldMap: ' + tOldMap);
        for(Tender_information__c t:(List<Tender_information__c>) Trigger.new){
            System.debug(LoggingLevel.INFO, '*** 进入for循环: ');
            System.debug(LoggingLevel.INFO, '*** t: ' + t);
            if(Trigger.isUpdate){
                if (String.isNotBlank(t.IsRelateProject__c) && t.IsRelateProject__c == '是' && t.relativeTime__c == null && System.Label.ProfileId_2S6.equals(UserInfo.getProfileId())) {
                    t.relativeTime__c = Datetime.now();
                }
                System.debug(LoggingLevel.INFO, '*** tOldMap: ' + tOldMap.get(t.Id).relativeDate__c);
                System.debug(LoggingLevel.INFO, '*** t.relativeDate__c: ' + t.relativeDate__c);
                // if(tOldMap.get(t.Id).relativeDate__c != null && t.relativeDate__c != tOldMap.get(t.Id).relativeDate__c){
                //lt 20221114 DB202211270805 【紧急】招标项目是否按时关联计算错误 start
                // if(t.relativeDate__c != null && t.relativeDate__c != tOldMap.get(t.Id).relativeDate__c){
                if(((t.OBSAP_relativeTime__c != null || t.relativeTime_F__c != null) && t.Tender_Olympus__c == null) || (t.relativeDate__c != null && t.relativeDate__c != tOldMap.get(t.Id).relativeDate__c)){
                //lt 20221114 DB202211270805 【紧急】招标项目是否按时关联计算错误 end
                    System.debug(LoggingLevel.INFO, '*** 进入if语句: ');
                    String datastr = String.valueOf(t.relativeDate__c);
                    cd.add( Date.valueOf(datastr.substring(0,10)) );
                    System.debug(LoggingLevel.INFO, '*** cd: ' + cd);
                }
            }
        }
        Map<Date,String> lm = new Map<Date,String>();
        if(cd.size() > 0){
            for(OlympusCalendar__c oc:[SELECT Id,Date__c FROM OlympusCalendar__c WHERE Date__c IN:cd]){
                lm.put(oc.Date__c,oc.Id);
                System.debug(LoggingLevel.INFO, '*** map赋值: ');
            }
            for(Tender_information__c l:(List<Tender_information__c>) Trigger.new){
                //lt 20221114 DB202211270805 【紧急】招标项目是否按时关联计算错误 start
                // if (l.relativeDate__c == null) {
                //     continue;
                // }
                if (l.relativeDate__c == null && l.OBSAP_relativeTime__c == null) {
                    continue;
                }
                Datetime relativetime = l.OBSAP_relativeTime__c != null ? l.OBSAP_relativeTime__c : l.relativeTime__c;
                // String datastr = String.valueOf(l.relativeDate__c);
                String datastr = String.valueOf(relativetime);
                //lt 20221114 DB202211270805 【紧急】招标项目是否按时关联计算错误 end
                String dt = lm.get(Date.valueOf(datastr.substring(0,10)));
                System.debug(LoggingLevel.INFO, '*** dt: '+ dt);
                l.Tender_Olympus__c = dt;
                System.debug(LoggingLevel.INFO, '*** l.Tender_Olympus__c: '+ l.Tender_Olympus__c);
            }
        }
    }
// fxk 2021/8/3 反逻辑删除 end
// 20210824 中标时修改关联询价的招标项目名和中标时间
    private void updateWin() {
        List<String> tenderIds = new List<String>();
        List<String> lostWinIds = new List<String>();
        // 20221028 ljh SWAG-CKL5UC start
        Map<Id,Tender_information__c>  tendMap = New Map<Id,Tender_information__c>();
        Map<Id,Opportunity> updateOpp = New Map<Id,Opportunity>();
        // 20221028 ljh SWAG-CKL5UC end
        for (Tender_information__c ten : newList) {
            /** 20220614 SWAG-CFD4SU you 更改,询价优先显示项目阶段最新的招标项目信息
            if ('3:结果'.equals(ten.InfoType__c) && !'3:结果'.equals((oldMap.get(ten.Id).InfoType__c))) {
                tenderIds.add(ten.Id);
            } else if (!'3:结果'.equals(ten.InfoType__c) && '3:结果'.equals((oldMap.get(ten.Id).InfoType__c))) {
                lostWinIds.add(ten.Id);
            }
            **/
            //上线处理老数据
            if((String.isNotBlank(ten.InfoType__c) && ten.InfoType__c != oldMap.get(ten.Id).InfoType__c) || (String.isNotBlank(ten.subInfoType__c) && ten.subInfoType__c != oldMap.get(ten.Id).subInfoType__c)  || System.Label.TenderToOpp == '1'){
               tenderIds.add(ten.Id);
            }
            // 20221028 ljh SWAG-CKL5UC add start
            // 关联询价的 询价页面创建日晚于招标项目公告记录日,漏单数为1
            // 关联询价的 && 更新有值
            if(ten.OpportunityNum__c > 0 && Trigger.isUpdate && oldMap.get(ten.Id).publicDate__c == null && ten.publicDate__c != null){
                tendMap.put(ten.Id, ten);
            }
            // 20221028 ljh SWAG-CKL5UC add end
        }
        if (tenderIds.size() > 0) {
            //20220616 SWAG-CFD4SU you 增加order by
            //查询招标项目下所有中间表
            List<Tender_Opportunity_Link__c> links =
                [SELECT id,
                 Tender_information__c,
                 Tender_information__r.OpenBidingTime__c,
                 Tender_information__r.WinnerAmount__c,
                 Tender_information__r.ZhongBiaoUnit1__c,
                 Tender_information__r.Tender_Order__c,
                 Opportunity__c
                 FROM Tender_Opportunity_Link__c
                 WHERE Tender_information__c IN :tenderIds
                 AND Opportunity__r.Bidding_Project_Name_Bid__c NOT IN :tenderIds];
                 WHERE Tender_information__c IN :tenderIds];// AND Opportunity__r.Bidding_Project_Name_Bid__c NOT IN :tenderIds
            if (links != null && links.size() > 0) {
                List<String> oppIds = new List<String>();
                for (Tender_Opportunity_Link__c link : links) {
                    oppIds.add(link.Opportunity__c);
                }
                if (oppIds.size() > 0) {
                    List<Opportunity> opps = [select id, Bidding_Project_Name_Bid__c, Bidding_Project_Name_Bid__r.InfoType__c, Closing_Bid_Date_Bid__c from Opportunity where Id in :oppIds and Bidding_Project_Name_Bid__r.InfoType__c != '3:结果'];
                    //查询询价下所有中间表
                    List<Tender_Opportunity_Link__c> links1 =
                    [SELECT id,
                     Tender_information__c,
                     Tender_information__r.OpenBidingTime__c,
                     Tender_information__r.WinnerAmount__c,
                     Tender_information__r.ZhongBiaoUnit1__c,
                     Tender_information__r.Tender_Order__c,
                     Tender_information__r.InfoType__c,
                     Tender_information__r.subInfoType__c,
                     Opportunity__c
                     FROM Tender_Opportunity_Link__c
                     WHERE Opportunity__c IN :oppIds order by Opportunity__c,Tender_information__r.Tender_Order__c desc, Tender_information__r.relativeTime_F__c desc];
                    List<Opportunity> opps = [select id, Bidding_Project_Name_Bid__c, Bidding_Project_Name_Bid__r.InfoType__c, Closing_Bid_Date_Bid__c,Opp_Order__c from Opportunity where Id in :oppIds];// and Bidding_Project_Name_Bid__r.InfoType__c != '3:结果'
                    if (opps != null && opps.size() > 0) {
                        for (Opportunity opp : opps) {
                            for (Tender_Opportunity_Link__c link : links) {
                            if(links1 !=null && links1.size() > 0){
                               for (Tender_Opportunity_Link__c link : links1) {
                                if (link.Opportunity__c == opp.Id) {
                                    opp.Bidding_Project_Name_Bid__c = link.Tender_information__c;
                                    break;
                                    //20220616 SWAG-CFD4SU you start 改造,询价实时显示项目阶段最新的招标项目信息
                                    if(opp.Opp_Order__c <= link.Tender_information__r.Tender_Order__c){
                                       opp.Bidding_Project_Name_Bid__c = link.Tender_information__c;
                                       break;
                                    }
                                    //20220616 SWAG-CFD4SU you end 改造,询价实时显示项目阶段最新的招标项目信息
                                }
                              }
                            }
                            //20220830 you SWAG-CHL67J start
                            Integer returncount =0;
                             for (Tender_Opportunity_Link__c link : links1) {
                                if (link.Opportunity__c == opp.Id) {
                                    if(String.isNotBlank(link.Tender_information__r.InfoType__c) && link.Tender_information__r.InfoType__c!='1:预告' && String.isNotBlank(link.Tender_information__r.subInfoType__c) && link.Tender_information__r.subInfoType__c!='3-1:废标公告' && link.Tender_information__r.subInfoType__c!='3-2:流标公告'){
                                        system.debug('test2进来了');
                                          returncount += 1;
                                      }
                                }
                            }
                            opp.Tender_Number__c =returncount;
                            //20220830 you SWAG-CHL67J end
                        }
                        // 需要跳过询价trigger 防止出现重复更新的情况
                        StaticParameter.EscapeOpportunityBefUpdTrigger = true;
@@ -693,6 +906,7 @@
                }
            }
        }
        /**20220616 SWAG-CFD4SU you
        if (lostWinIds.size() > 0) {
            List<Tender_Opportunity_Link__c> links_2 =
                [SELECT id,
@@ -726,6 +940,23 @@
                }
            }
        }
        **/
        // 20221028 ljh SWAG-CKL5UC add start
        if(tendMap.size() > 0){
            List<Tender_Opportunity_Link__c> links = [select id, Opportunity__c, Tender_information__c, Opportunity__r.Created_Day__c ,Opportunity__r.LeakageNumber__c,Opportunity__r.LeadSource  from Tender_Opportunity_Link__c where Tender_information__c in :tendMap.keySet()];
            for(Tender_Opportunity_Link__c lk:links){
                if(lk.Opportunity__r.Created_Day__c  > tendMap.get(lk.Tender_information__c).publicDate__c && lk.Opportunity__r.LeadSource == '招标网'){
                    Opportunity opp = new Opportunity();
                    opp.Id = lk.Opportunity__c;
                    opp.LeakageNumber__c = 1;
                    updateOpp.put(opp.Id,opp);
                }
            }
        }
        if(updateOpp.size() > 0){
            update updateOpp.values();
        }
        // 20221028 ljh SWAG-CKL5UC add end
    }
    public void updateTenOwner() {
@@ -950,7 +1181,6 @@
                    oppMainMap.put(oppLinks.Tender_information__c, oppLinks.Opportunity__r.OwnerId );
                }
            }
            for (Id  tenderId : hpTypeToMainMap.keySet()) {
                for (Tender_information__c info : newList) {
                    // add 【委托】P-招标项目-手动创建的招标项目增加必填字段 2021/11/03 fxk Star
@@ -978,13 +1208,33 @@
                                System.debug('----------9---------' + UpdateTenMap);
                            }
                        } else {
                            UpdateTenMap.put(tenderId, '00510000000gmxH');
                            System.debug('----------10---------' + UpdateTenMap);
                            // 20220421 SWAG-CC58ME ljh add 是否相关:是;关联医院:!null; 关联战略科室 null; start
                            // 是否应标:有值 :所有人:启用 不需要更新
                            // UpdateTenMap.put(tenderId, '00510000000gmxH');
                            // System.debug('----------10---------' + UpdateTenMap);
                            if(!(String.isNotBlank(info.IsBid__c) && info.OwnerIsActive__c)){
                                UpdateTenMap.put(tenderId, '00510000000gmxH');
                                System.debug('----------10---------' + UpdateTenMap);
                            }
                            // 20220421 SWAG-CC58ME ljh add 是否相关:是;关联医院:!null; 关联战略科室 null; end
                        }
                    } else if ((oldTen.OwnerId != null && oldTen.OwnerId.equals(info.OwnerId))
                            && !hpMainMap.get(tenderId).containskey(info.ownerId)) {
                       UpdateTenMap.put(tenderId, oppMainMap.get(tenderId));
                       System.debug('----------11---------' + UpdateTenMap);
                     } else {
                        /*
                        20220422 SWAG-CC58ME ljh update
                        针对如下场景做的修改:
                        相关性确认:之后所有人取了医院+第一个战略科室的主担当A,然后关联询价,询价所有人是B,
                        所有人取了B。然后B离职了,运行Batch,变成A,在把B启用,不变会来B
                        */
                        // 20220422 ljh update start
                        System.debug('zheli:'+oppMainMap.get(tenderId));
                        Boolean a = oldTen.OwnerId.equals(info.OwnerId);
                        Boolean b = !hpMainMap.get(tenderId).containskey(info.ownerId);
                        System.debug('zheli:'+a+b);
                        // if ((oldTen.OwnerId != null && oldTen.OwnerId.equals(info.OwnerId))
                        //      && !hpMainMap.get(tenderId).containskey(info.ownerId)) {
                        // 20220422 ljh update end
                        UpdateTenMap.put(tenderId, oppMainMap.get(tenderId));
                        System.debug('----------11---------' + UpdateTenMap);
                    }
                }
            }
@@ -999,4 +1249,79 @@
        }
        // StaticParameter.EscapeOtherUpdateTenOwner = true;
    }
    /*
    集采项目导致所有人更新
    **/
    // 20221011 ljh  SWAG-CK28WT
    public void updateTenOwnerJC() {
        //
        String OCSM_province = '市场企划本部';
        Id OwnerIdStr;
        List<OCM_Management_Province__c> ompList = [select Id,TenderAssistant1__c,TenderAssistant1__r.IsActive,TenderAssistant2__c from OCM_Management_Province__c where name =:OCSM_province];
        if(ompList.size() > 0 && ompList[0].TenderAssistant1__r.IsActive){
            OwnerIdStr = ompList[0].TenderAssistant1__c;
        }
        System.debug('zheli00:'+OwnerIdStr);
        for (Tender_information__c nObj : newList) {
            Tender_information__c oObj = oldMap.get(nObj.Id);
            if (nObj.CentralizedProject__c != oObj.CentralizedProject__c) {
                if(nObj.CentralizedProject__c && OwnerIdStr != null){
                    /**
                    本部自动变成市场企划本部,项目助理和所有人都是市场企划本部的人,
                    取OCSM管理省页面维护的市场企划本部,招标项目助理1,
                    */
                    nObj.OwnerId = OwnerIdStr;
                    nObj.InfoOwner__c = OwnerIdStr;
                }else if(!nObj.CentralizedProject__c){
                    /**
                    取消勾选后返回营业部门的省和本部,
                    所有人根据关联医院和战略科室取担当的名字。
                    */
                    updateTenOwner();
                }
            }
            // 如果触发 更新所有人 没有询价则 还是市场企划本部
            if (!StaticParameter.EscapeOtherUpdateTenOwner) {
                if(nObj.CentralizedProject__c && OwnerIdStr != null && (nObj.OpportunityNum__c == 0 || nObj.OpportunityNum__c == null)){
                    nObj.OwnerId = OwnerIdStr;
                    nObj.InfoOwner__c = OwnerIdStr;
                }
            }
        }
    }
    // 中标任务 废标流标时清空中标日
    public void clearConfirmationofAward() {
        List<String> tenders = new List<String>();
        String labelTypes = System.Label.ClearConfirmationofAwardTypes;
        List<String> subTypes = labelTypes.split(',');
        for (Tender_information__c tender : this.newList) {
            Tender_information__c old_tender = this.oldMap.get(tender.Id);
            if (subTypes.contains(tender.subInfoType__c) && !tender.subInfoType__c.equals(old_tender.subInfoType__c)) {
                tenders.add(tender.Id);
            }
        }
        if (tenders.size() > 0) {
            List<Tender_Opportunity_Link__c> links = [select Id, Opportunity__c from Tender_Opportunity_Link__c where Tender_information__c in :tenders];
            if (links != null && links.size() > 0) {
                List<String> oppids = new List<String>();
                for (Tender_Opportunity_Link__c link : links) {
                    oppids.add(link.Opportunity__c);
                }
                // 状态=询价且没有做合同申请的
                List<Opportunity> opps = [select Id, Closing_Bid_Date__c
                                        from Opportunity
                                        where StageName = '引合'
                                        and IF_Submit__c = false
                                        and Id in :oppids];
                if (opps != null && opps.size() > 0) {
                    for (Opportunity opp : opps) {
                        opp.Closing_Bid_Date__c = null;
                    }
                    StaticParameter.EscapeOpportunityBefUpdTrigger = true;
                    update opps;
                    StaticParameter.EscapeOpportunityBefUpdTrigger = false;
                }
            }
        }
    }
}
force-app/main/default/classes/TenderOpportunityLinkHandler.cls
@@ -26,6 +26,12 @@
        updateOppotunityByDelete(this.oldList);
    }
}
protected override void beforeDelete() {
    // 判断是否跳过
    if (!StaticParameter.EscapeTOLinkTrigger) {
        updateOppotunityBeforeDelete(this.oldList);
    }
}
protected override void beforeInsert() {
    if (this.newList != null && this.newList.size() > 0) {
@@ -195,27 +201,49 @@
}
// 更新询价信息
public void updateOppotunityByInsert(List<Tender_Opportunity_Link__c> records) {
public void updateOppotunityByInsert(List<Tender_Opportunity_Link__c> records) {
    if (records != null && records.size() > 0) {
        List<String> oppIds = new List<String>();
        Set<Id> oppIdsSet = new Set<Id>();// 20221028 ljh SWAG-CKL5UC
        //SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy start
        // List<String> TenderIds = new List<String>();
        //SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy end
        // 获得要更新的询价
        for (Tender_Opportunity_Link__c record: records) {
            if (!oppIds.contains(record.Opportunity__c)) {
                oppIds.add(record.Opportunity__c);
                // 20221028 ljh SWAG-CKL5UC add start
                system.debug('zheli00:'+record.IsLeakage__c);
                if(record.IsLeakage__c){
                    oppIdsSet.add(record.Opportunity__c);
                }
                // 20221028 ljh SWAG-CKL5UC add end
            }
            //SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy start
            // if (!TenderIds.contains(record.Tender_information__c)) {
            //     TenderIds.add(record.Tender_information__c);
            // }
            //SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy end
        }
        if (oppIds.size() > 0) {
            List<Opportunity> opportunities = [select id, Bidding_Project_Name_Bid__c, Bidding_Project_Name_Bid__r.InfoType__c, TenderBeginDate_Text__c, InfoTypeBid_text__c from Opportunity where id in :oppIds and Bidding_Project_Name_Bid__r.InfoType__c != '3:结果'];
            List<String> tenIds = new List<String>();//20220715 you 招标项目插入时,是否需要发送询价任务 新的招标项目
            //20220615 you SWAG-CFD4SU 改造 start 始终显示最新的 ① 3:结果,② 4:变更,③ 2:公告,④ 1:预告,⑤ 5:其他
            // 20221028 ljh SWAG-CKL5UC 查询增加 LeakageNumber__c  , TenderBeginDate_Text__c
            List<Opportunity> opportunities = [select id,Tender_Number__c, Bidding_Project_Name_Bid__c, Bidding_Project_Name_Bid__r.InfoType__c, InfoTypeBid_text__c,Opp_Order__c,LeakageNumber__c   from Opportunity where id in :oppIds ];//and Bidding_Project_Name_Bid__r.InfoType__c != '3:结果'];
            if (opportunities.size() > 0) {
                List<Tender_Opportunity_Link__c> links = [select id, Opportunity__c, Tender_information__c, Tender_information__r.InfoType__c, Tender_information__r.TenderBeginTime__c from Tender_Opportunity_Link__c where Opportunity__c in :oppIds];
                List<Tender_Opportunity_Link__c> links = [select id, Opportunity__c, Tender_information__c, Tender_information__r.InfoType__c, Tender_information__r.TenderBeginTime__c,Tender_information__r.TenderDate__c,Tender_information__r.Tender_Order__c,Tender_information__r.subInfoType__c from Tender_Opportunity_Link__c where Opportunity__c in :oppIds order by Opportunity__c,Tender_information__r.Tender_Order__c desc, Tender_information__r.relativeTime_F__c desc];
                for (Opportunity opp : opportunities) {
                    for (Tender_Opportunity_Link__c link : links) {
                        boolean defaultFlag = false;
                        if (opp.Id.equals(link.Opportunity__c)) {
                            if (opp.Bidding_Project_Name_Bid__c == null || ''.equals(opp.Bidding_Project_Name_Bid__c)) {
                            /**
                             if (opp.Bidding_Project_Name_Bid__c == null || ''.equals(opp.Bidding_Project_Name_Bid__c)) {
                                opp.Bidding_Project_Name_Bid__c = link.Tender_information__c;
                                opp.TenderBeginDate_Text__c = link.Tender_information__r.TenderBeginTime__c;
                                opp.InfoTypeBid_text__c = link.Tender_information__r.InfoType__c;
                            }
                            if ('3:结果'.equals(link.Tender_information__r.InfoType__c)) {
                                opp.Bidding_Project_Name_Bid__c = link.Tender_information__c;
                                if (opp.TenderBeginDate_Text__c == null) {
@@ -226,32 +254,165 @@
                                }
                                break;
                            }
                            **/
                            if(opp.Opp_Order__c <= link.Tender_information__r.Tender_Order__c){
                              opp.Bidding_Project_Name_Bid__c = link.Tender_information__c;
                              //opp.TenderBeginDate_Text__c =  link.Tender_information__r.TenderDate__c;//更改询价状态2时,引用超20,link.Tender_information__r.TenderBeginTime__c;
                              opp.InfoTypeBid_text__c = link.Tender_information__r.InfoType__c;
                              //20220715 you 招标项目 start
                              if(String.isNotBlank(link.Tender_information__r.InfoType__c) && link.Tender_information__r.InfoType__c=='3:结果' && String.isNotBlank(link.Tender_information__r.subInfoType__c) && (link.Tender_information__r.subInfoType__c=='3-5:中标通知' || link.Tender_information__r.subInfoType__c=='3-6:合同公告')){
                                tenIds.add(link.Opportunity__c); //符合条件生成任务
                              }
                              //20220715 you 招标项目 end
                              break;
                            }
                        }
                    }
                    //20220829 you SWAG-CHL67J start
                    Integer returncount =0;
                     for (Tender_Opportunity_Link__c link : links) {
                        if (opp.Id.equals(link.Opportunity__c)) {
                            if(String.isNotBlank(link.Tender_information__r.InfoType__c) && link.Tender_information__r.InfoType__c!='1:预告' && String.isNotBlank(link.Tender_information__r.subInfoType__c) && link.Tender_information__r.subInfoType__c!='3-1:废标公告' && link.Tender_information__r.subInfoType__c!='3-2:流标公告'){
                                system.debug('test1进来了');
                                  returncount += 1;
                              }
                        }
                    }
                    opp.Tender_Number__c =returncount;
                    //20220829 you SWAG-CHL67J end
                    // 20221028 ljh SWAG-CKL5UC add start
                    if(oppIdsSet.contains(opp.Id) && opp.LeakageNumber__c != 1){
                        opp.LeakageNumber__c = 1;
                    }
                    // 20221028 ljh SWAG-CKL5UC add end
                }
                update opportunities;
            }
            //20220615 you SWAG-CFD4SU 改造 end
            //20220715 you 招标任务 start
            if (tenIds !=null && tenIds.size() > 0) {
              Database.executeBatch(new TenderResultConfirmTaskBatch(tenIds));
            }
            //20220715 you 招标任务 end
        }
        //SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy start
        // if (TenderIds.size() > 0) {
        //     updateTender(TenderIds);
        // }
        //SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy end
    }
}
//SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy start
//跟新招标项目的中标数和应标数
// public void updateTender(List<String> TenderIds) {
//     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:TenderIds];
//     Map<String,Tender_information__c> TenderinformationMap = new Map<String,Tender_information__c>();
//     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);
//             }
//         }
//     }
//     if(TenderinformationMap.size()>0){
//         List<Tender_information__c> Tender_informationList = new List<Tender_information__c>();
//         for (Tender_information__c value : TenderinformationMap.values()) {
//             Tender_informationList.add(value);
//         }
//         update Tender_informationList;
//     }
// }
//SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy end
//20220718 you 询价任务 start
//删除link时,任务取消,清空询价中标信息
public void updateOppotunityBeforeDelete(List<Tender_Opportunity_Link__c> records) {
    if (records != null && records.size() > 0) {
        Set<String> oppTens = new Set<String>();//询价,招标项目 拼接
        List<String> oppIds = new List<String>();
        // 获得要更新的询价
        for (Tender_Opportunity_Link__c record: records) {
            String oppid =String.valueOf(record.Opportunity__c);
            String tenid =String.valueOf(record.Tender_information__c);
            oppTens.add(oppid.subString(0,15)+tenid.subString(0,15));
           if (!oppIds.contains(record.Opportunity__c)) {
                oppIds.add(record.Opportunity__c);
            }
        }
        if (null!=oppTens && oppTens.size()>0) {
          List<Opportunity> opportunities = [select id, Bidding_Project_Name_Bid__c,Opp_Order__c from Opportunity where id in :oppIds];
           List<task__c> taskList = [select id,taskStatus__c,Tender_information_Task__c,OpportunityId__c from task__c where (RecordType.Name ='失单报告任务' and OpportunityId__c in:oppIds) or (RecordType.Name ='中标结果确认' and Opp_Tender__c in :oppTens)];
            for(task__c tsk : taskList){
                tsk.taskStatus__c = '04 取消';
                tsk.cancelDate__c = date.today();
                tsk.cancelReasonSelect__c = '取消询价关联';
            }
             update taskList;
            if(taskList.size() > 0){
                for (task__c tlink : taskList) {
                    for (Opportunity opp : opportunities) {
                        if (opp.Id == tlink.OpportunityId__c) {
                           //20220718 you 询价任务 start
                            opp.ConfirmationofAward__c = null;
                            opp.Task_createTime__c = null;
                            opp.ConfirmationofAward_createTime__c =null;
                            opp.LostTask_comfirmTime__c =null;
                            opp.Is_ConfirmationofAward__c =null;
                            opp.LostTask_createTime__c =null;
                            opp.Closing_Bid_Date__c = null;
                            //20220718 you 询价任务 end
                       }
                    }
                }
            }
            update opportunities;
        }
    }
}
//20220718 you 询价任务 end
// 更新询价信息
public void updateOppotunityByDelete(List<Tender_Opportunity_Link__c> records) {
    if (records != null && records.size() > 0) {
        List<String> oppIds = new List<String>();
        //SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy start
        // List<String> TenderIds = new List<String>();
        //SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy end
        // 获得要更新的询价
        for (Tender_Opportunity_Link__c record: records) {
            if (!oppIds.contains(record.Opportunity__c)) {
                oppIds.add(record.Opportunity__c);
            }
            //SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy start
            // if (!TenderIds.contains(record.Tender_information__c)) {
            //     TenderIds.add(record.Tender_information__c);
            // }
            //SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy end
        }
        if (oppIds.size() > 0) {
            List<Opportunity> opportunities = [select id, Bidding_Project_Name_Bid__c, TenderBeginDate_Text__c from Opportunity where id in :oppIds];
            List<String> tenIds = new List<String>();//20220715 you 招标项目插入时,是否需要发送询价任务 新的招标项目
            //20220615 you SWAG-CFD4SU 改造 增加查询条件
            List<Opportunity> opportunities = [select id, Bidding_Project_Name_Bid__c,Tender_Number__c,Opp_Order__c from Opportunity where id in :oppIds];
            if (opportunities.size() > 0) {
                List<Tender_Opportunity_Link__c> links = [select id, Opportunity__c, Tender_information__c, Tender_information__r.InfoType__c from Tender_Opportunity_Link__c where Opportunity__c in :oppIds];
                //20220615 you SWAG-CFD4SU 改造 增加查询条件
                List<Tender_Opportunity_Link__c> links = [select id, Opportunity__c, Tender_information__c, Tender_information__r.InfoType__c,Tender_information__r.subInfoType__c,Tender_information__r.Tender_Order__c,Tender_information__r.TenderBeginTime__c,Tender_information__r.TenderDate__c from Tender_Opportunity_Link__c where Opportunity__c in :oppIds order by Opportunity__c,Tender_information__r.Tender_Order__c desc, Tender_information__r.relativeTime_F__c desc];
                List<AggregateResult> sum_list = [select count(id) cnt, Opportunity__c from Tender_Opportunity_Link__c where Opportunity__c in :oppIds group by Opportunity__c];
                Map<String, Integer> sum_map = new Map<String, Integer>();
                if (sum_list != null && sum_list.size() > 0) {
                    for (AggregateResult result : sum_list) {
                        sum_map.put(String.valueOf(result.get('Opportunity__c')), Integer.valueOf(result.get('cnt')));
@@ -260,23 +421,174 @@
                for (Opportunity opp : opportunities) {
                    if (sum_map.get(opp.Id) == null || sum_map.get(opp.Id) == 0) {
                        opp.Bidding_Project_Name_Bid__c = null;
                        opp.TenderBeginDate_Text__c = null;
                        //opp.TenderBeginDate_Text__c = null;
                        opp.InfoTypeBid_text__c = null;
                        //20220718 you 询价任务 start
                        opp.ConfirmationofAward__c = null;
                        opp.Task_createTime__c = null;
                        opp.ConfirmationofAward_createTime__c =null;
                        opp.LostTask_comfirmTime__c =null;
                        opp.Is_ConfirmationofAward__c =null;
                        opp.Closing_Bid_Date__c = null;
                        //20220718 you 询价任务 end
                        // 20221028 ljh SWAG-CKL5UC start
                        opp.LeakageNumber__c = null;
                        // 20221028 ljh SWAG-CKL5UC end
                    } else {
                        for (Tender_Opportunity_Link__c link : links) {
                            if (opp.Id == link.Opportunity__c) {
                                //20220615 you SWAG-CFD4SU 改造 start
                                /**
                                opp.Bidding_Project_Name_Bid__c = link.Tender_information__c;
                                if ('3:结果'.equals(link.Tender_information__r.InfoType__c)) {
                                    opp.Bidding_Project_Name_Bid__c = link.Tender_information__c;
                                    break;
                                }
                                **/
                                //records[0].addError(opp.Opp_Order__c+'ceshi==='+links.size()+'==='+link.Tender_information__r.Tender_Order__c);
                                if(opp.Opp_Order__c >= link.Tender_information__r.Tender_Order__c){
                                  opp.Bidding_Project_Name_Bid__c = link.Tender_information__c;
                                  //opp.TenderBeginDate_Text__c = link.Tender_information__r.TenderDate__c;//更改询价状态2时,引用超20,link.Tender_information__r.TenderBeginTime__c;
                                  opp.InfoTypeBid_text__c = link.Tender_information__r.InfoType__c;
                                  //20220718 you 招标项目 start
                                  if(String.isNotBlank(link.Tender_information__r.InfoType__c) && link.Tender_information__r.InfoType__c=='3:结果' && String.isNotBlank(link.Tender_information__r.subInfoType__c) && (link.Tender_information__r.subInfoType__c=='3-5:中标通知'  || link.Tender_information__r.subInfoType__c=='3-6:合同公告')){
                                    tenIds.add(link.Opportunity__c); //符合条件生成任务
                                  }
                                  //20220718 you 招标项目 end
                                  break;
                                }
                                //20220615 you SWAG-CFD4SU 改造 end
                            }
                        }
                    }
                    //20220829 you SWAG-CHL67J start
                    Integer returncount =0;
                    for (Tender_Opportunity_Link__c link1 : links) {
                        if (opp.Id == link1.Opportunity__c) {
                            if(String.isNotBlank(link1.Tender_information__r.InfoType__c) && link1.Tender_information__r.InfoType__c!='1:预告' && String.isNotBlank(link1.Tender_information__r.subInfoType__c) && link1.Tender_information__r.subInfoType__c!='3-1:废标公告' && link1.Tender_information__r.subInfoType__c!='3-2:流标公告'){
                                system.debug('jinlaile');
                                returncount += 1;
                              }
                         }
                    }
                    opp.Tender_Number__c= returncount;
                    //20220829 you SWAG-CHL67J end
                }
                update opportunities;
            }
            //20220718 you 招标任务 start
            if (tenIds !=null && tenIds.size() > 0) {
              Database.executeBatch(new TenderResultConfirmTaskBatch(tenIds));
            }
            //20220718 you 招标任务 end
        }
        //SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy start
        // if (TenderIds.size() > 0) {
        //     updateTender(TenderIds);
        // }
        //SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy end
    }
}
 @TestVisible
    public static void testI() {
        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++;
    }
}
force-app/main/default/triggers/OpportunityHpDeptUpd.trigger
@@ -1,4 +1,9 @@
trigger OpportunityHpDeptUpd on Opportunity (before insert, before update) {
    // SWAG-CE55BX 预测优化 start
    if (StaticParameter.EscapeOppandStaTrigger) {
        return;
    }
    // SWAG-CE55BX 预测优化 end
    /*
    if (StaticParameter.EscapeOpportunityHpDeptUpdTrigger) {
System.debug('Escape、EscapeOpportunityHpDeptUpdTrigger:::::' + StaticParameter.EscapeOpportunityHpDeptUpdTrigger);
@@ -9,6 +14,14 @@
    Map<Integer, Opportunity> oppForLookUpMap = new Map<Integer, Opportunity>();
    Integer idx = 0;
    for(Opportunity opp : Trigger.new) {
        // 20221112 you DB202211366462
            if(opp.TenderBeginDate__c !=null && opp.TenderBeginDate__c != opp.TenderBeginDate_Text__c ){
                opp.TenderBeginDate_Text__c = opp.TenderBeginDate__c;
            }else if(opp.TenderBeginDate__c ==null){
                opp.TenderBeginDate_Text__c = opp.Bid_Date__c;
            }
        // 古いデータの更新を禁止
        if (Trigger.isUpdate) {
            Boolean noChange = false;