public without sharing class TenderOpportunityLinkHandler extends Oly_TriggerHandler { private Map newMap; private Map oldMap; private List newList; private List oldList; public TenderOpportunityLinkHandler() { this.newMap = (Map) Trigger.newMap; this.oldMap = (Map) Trigger.oldMap; this.newList = (List) Trigger.new; this.oldList = (List) Trigger.old; } protected override void afterInsert() { // 判断是否跳过 if (!StaticParameter.EscapeTOLinkTrigger) { updateTender(this.newList); updateOppotunityByInsert(this.newList); } } protected override void afterDelete() { // 判断是否跳过 if (!StaticParameter.EscapeTOLinkTrigger) { updateTender(this.oldList); 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) { for (Tender_Opportunity_Link__c link : this.newList) { if (link.Tender_Opportunity_Uniq__c == null || link.Tender_Opportunity_Uniq__c == '') { link.Tender_Opportunity_Uniq__c = link.Tender_information__c + '' + link.Opportunity__c; } } } } // 更新招标信息 public void updateTender(List records) { if (records != null && records.size() > 0) { List tenders = new List(); // 获得要更新的招标项目 for (Tender_Opportunity_Link__c record: records) { if (!tenders.contains(record.Tender_information__c)) { tenders.add(record.Tender_information__c); } } if (tenders.size() > 0) { List tender_list = [select id, OpportunityNum__c, RelateOppTime__c, IsRelateProject__c, Hospital__c, Hospital1__c, Hospital2__c, Hospital3__c, Hospital4__c, OwnerId, NotBidApprovalStatus__c from Tender_information__c where id in :tenders]; if (tender_list != null && tender_list.size() > 0) { // 不应标申请中的时候 调回申请修改 20210907 start List approval_tenders = new List(); for (Tender_information__c tender : tender_list) { if (tender.NotBidApprovalStatus__c != null && tender.NotBidApprovalStatus__c == '申请中') { approval_tenders.add(tender.Id); } } if (approval_tenders.size() > 0) { List requests = new List (); List pis = [Select Id, SubmittedById, TargetObjectId from ProcessInstance where TargetObjectId in :approval_tenders and Status = 'Pending']; if (pis != null && pis.size() > 0) { List pi_ids = new List(); for (ProcessInstance pi : pis) { pi_ids.add(pi.Id); } for(ProcessInstanceWorkItem wi : [Select Id, ProcessInstanceId from ProcessInstanceWorkItem where ProcessInstanceId IN :pi_ids]){ Approval.ProcessWorkitemRequest req2 = new Approval.ProcessWorkitemRequest(); for (ProcessInstance pi : pis) { if (pi.Id.equals(wi.ProcessInstanceId)) { for (Tender_information__c tender : tender_list) { if (tender.Id.equals(pi.TargetObjectId)) { if (pi.SubmittedById.equals(Userinfo.getUserId())) { req2.setAction('Removed'); tender.NotBidApprovalStatus__c = '草案中'; } else { req2.setAction('Reject'); tender.NotBidApprovalStatus__c = '驳回'; tender.IsBid__c = null; } break; } } break; } } req2.setWorkitemId(wi.Id); requests.add(req2); } system.debug('==requests.size()=='+requests.size()); if (requests.size() > 0) { Approval.ProcessResult[] processResults = null; processResults = Approval.process(requests, true); system.debug('==调回结果=='+processResults); } } } // 不应标申请中的时候 调回申请修改 20210907 end // 更新招标项目的阶段、关联询价时间和关联医院 List sum_list = [select count(id) cnt, Tender_information__c from Tender_Opportunity_Link__c where Tender_information__c in :tenders group by Tender_information__c]; Map sum_map = new Map(); if (sum_list != null && sum_list.size() > 0) { for (AggregateResult result : sum_list) { sum_map.put(String.valueOf(result.get('Tender_information__c')), Integer.valueOf(result.get('cnt'))); } } // 仅新增关联询价时判断是否要写入医院 List links = null; if (Trigger.isAfter && Trigger.isInsert) { links = [select id, Tender_information__c, Opportunity__c, Opportunity__r.Hospital__c, Opportunity__r.OwnerId from Tender_Opportunity_Link__c where Tender_information__c in :tenders]; } for (Tender_information__c tender : tender_list) { // 新增或删除关联时,要写入反映询价标签 tender.IsReactionOpp__c = true; // 写入/清空关联询价时间和是否相关状态 tender.OpportunityNum__c = sum_map.get(tender.id) != null ? sum_map.get(tender.id) : 0; if (tender.IsRelateProject__c != '是') { tender.IsRelateProject__c = '是'; tender.RelateOppTime__c = datetime.now(); tender.irrelevantReasons__c = null; tender.irrelevantReasonOther__c = null; } else if (tender.OpportunityNum__c == 0) { tender.RelateOppTime__c = null; // tender.IsRelateProject__c = null; } if (Trigger.isAfter && Trigger.isInsert && links != null && links.size() > 0) { system.debug('links等于【'+links+'】结束'+links.size()); // 招标项目的医院 Map fiveHospitalMap = new Map(); fiveHospitalMap.put('Hospital__c', tender.Hospital__c); fiveHospitalMap.put('Hospital1__c', tender.Hospital1__c); fiveHospitalMap.put('Hospital2__c', tender.Hospital2__c); fiveHospitalMap.put('Hospital3__c', tender.Hospital3__c); fiveHospitalMap.put('Hospital4__c', tender.Hospital4__c); // 整理所有的所有人 List owners = new List(); for (Tender_Opportunity_Link__c link : links) { owners.add(link.Opportunity__r.OwnerId); } for(Integer i = 0; i < links.size(); i++) { // 不是同一个招标项目的跳过 if (!tender.Id.equals(links.get(i).Tender_information__c)) { continue; } // 新增时还要判断所有人问题 if (tender.OwnerId == null || '00510000000gmxH'.equals(tender.OwnerId) || (owners.size() > 0 && !owners.contains(tender.OwnerId))) { tender.OwnerId = links.get(i).Opportunity__r.OwnerId; } //当招投标项目的五个医院赋值完成后不再赋值 Boolean HospitalIsNeedBreak = false; for(String ApiName :fiveHospitalMap.keySet()) { HospitalIsNeedBreak = fiveHospitalMap.get(ApiName)==null?false:true; } if(HospitalIsNeedBreak) { break; } //给招投标项目的5个医院设值 for(String ApiName : fiveHospitalMap.keySet()) { String tempTenderHospId = fiveHospitalMap.get(ApiName)==null?'':fiveHospitalMap.get(ApiName); String oppHospId = links.get(i).Opportunity__r.Hospital__c; //如果招标项目已经有该医院就判断下一个询价的医院 system.debug('tempTenderHospId等于【'+tempTenderHospId+'】结束'); system.debug('oppHospId等于【'+oppHospId+'】结束'); if(tempTenderHospId.contains(oppHospId)) { break; } //医院为空,赋值医院(赋值之后进行赋值下一个医院) if(fiveHospitalMap.get(ApiName) == null || String.isBlank( fiveHospitalMap.get(ApiName) )) { fiveHospitalMap.put(ApiName,oppHospId); break; } } } tender.Hospital__c = fiveHospitalMap.get('Hospital__c'); tender.Hospital1__c = fiveHospitalMap.get('Hospital1__c'); tender.Hospital2__c = fiveHospitalMap.get('Hospital2__c'); tender.Hospital3__c = fiveHospitalMap.get('Hospital3__c'); tender.Hospital4__c = fiveHospitalMap.get('Hospital4__c'); } } if (Trigger.isAfter && Trigger.isDelete) { StaticParameter.EscapeOtherUpdateTenOwner = false; update tender_list; StaticParameter.EscapeOtherUpdateTenOwner = true; } else { update tender_list; } } } } } // 更新询价信息 public void updateOppotunityByInsert(List records) { if (records != null && records.size() > 0) { List oppIds = new List(); Set oppIdsSet = new Set();// 20221028 ljh SWAG-CKL5UC //SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy start // List TenderIds = new List(); //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 tenIds = new List();//20220715 you 招标项目插入时,是否需要发送询价任务 新的招标项目 //20220615 you SWAG-CFD4SU 改造 start 始终显示最新的 ① 3:结果,② 4:变更,③ 2:公告,④ 1:预告,⑤ 5:其他 // 20221028 ljh SWAG-CKL5UC 查询增加 LeakageNumber__c , TenderBeginDate_Text__c List 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 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)) { 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) { opp.TenderBeginDate_Text__c = link.Tender_information__r.TenderBeginTime__c; } if (opp.InfoTypeBid_text__c == null) { opp.InfoTypeBid_text__c = link.Tender_information__r.InfoType__c; } 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 TenderIds) { // List 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 TenderinformationMap = new Map(); // 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_informationList = new List(); // 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 records) { if (records != null && records.size() > 0) { Set oppTens = new Set();//询价,招标项目 拼接 List oppIds = new List(); // 获得要更新的询价 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 opportunities = [select id, Bidding_Project_Name_Bid__c,Opp_Order__c from Opportunity where id in :oppIds]; List 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 records) { if (records != null && records.size() > 0) { List oppIds = new List(); //SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy start // List TenderIds = new List(); //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 tenIds = new List();//20220715 you 招标项目插入时,是否需要发送询价任务 新的招标项目 //20220615 you SWAG-CFD4SU 改造 增加查询条件 List opportunities = [select id, Bidding_Project_Name_Bid__c,Tender_Number__c,Opp_Order__c from Opportunity where id in :oppIds]; if (opportunities.size() > 0) { //20220615 you SWAG-CFD4SU 改造 增加查询条件 List 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 sum_list = [select count(id) cnt, Opportunity__c from Tender_Opportunity_Link__c where Opportunity__c in :oppIds group by Opportunity__c]; Map sum_map = new Map(); 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'))); } } 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.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++; } }