trigger RentalApplyOtherTrigger on Rental_Apply__c (before insert, before update, after insert, after update, after delete) { public static Boolean tempCheck = false; if(((!Test.isRunningTest()) && UserInfo.getUserId() == System.Label.ByPassTrigger) || FixtureUtil.isRepairRenewal) { return; } //SWAG-B3U63C 2018/8/21 更新学会培训的申请备品申请单数 start if (Trigger.isAfter) { list CampaignID = new list(); if (Trigger.isInsert || Trigger.isUndelete ) { for (Rental_Apply__c local : Trigger.New) { //20231124 sx add 备品智能化添加 if (String.isNotEmpty(local.Campaign__c) && !local.Is_Auto__c){ CampaignID.add(local.Campaign__c); } } } // 2023-10-31 zyh 智能化 start if (Trigger.isInsert) { List reIdList = new List(); List opdRaIdList = new List(); for (Rental_Apply__c inRa : Trigger.new){ //Rental_Apply__c oldRa = Trigger.oldMap.get(inRa.Id); System.debug('zyhtest====cfq'+inRa.Demo_purpose1__c+'--'+inRa.Split_Apply_Reason__c +'--' +inRa.Root_Rental_Apply__c); // 不是分单的,维修代用的申请单需要创建配套,分单的不需要 if (inRa.Demo_purpose1__c == '维修代用' && inRa.Demo_purpose2__c != '故障排查' && inRa.Demo_purpose2__c != '索赔QIS' && inRa.Repair__c != null && String.isBlank(inRa.Split_Apply_Reason__c) && String.isBlank(inRa.Root_Rental_Apply__c)){ reIdList.add(inRa.Repair__c); } // else { //return; // 不是修理创建的申请单不需要自动建配套/明细 // } //2023/11/22 sx add 产品试用手动创建也需要配套 if(inRa.Demo_purpose1__c == '产品试用' && inRa.OPDPlan__c != null && !inRa.Is_Auto__c && String.isBlank(inRa.Split_Apply_Reason__c) && String.isBlank(inRa.Root_Rental_Apply__c)){ opdRaIdList.add(inRa.OPDPlan__c); } } if (reIdList.size() > 0) { // 查询申请单的修理 List repList = [SELECT Id,Name,Delivered_Product__c,Delivered_Product__r.Salesdepartment__c,Delivered_Product__r.Fixture_Model_No_F__c,Delivered_Product__r.Equipment_Type__c,Delivered_Product__r.Product_category__c FROM Repair__c WHERE Id IN :reIdList]; // 查询配套 if (repList.size() > 0) { List fsList = [SELECT Id,Name,Fixture_Set_Body_Model_No__c FROM Fixture_Set__c WHERE Fixture_Set_Body_Model_No__c = :repList[0].Delivered_Product__r.Fixture_Model_No_F__c]; if (fsList.size() > 0) { // 新建配套一览 Rental_Apply_Equipment_Set__c raes = new Rental_Apply_Equipment_Set__c(); raes.Name = '*'; raes.Rental_Apply__c = Trigger.new[0].Id; raes.Fixture_Set__c = fsList[0].Id; raes.IndexFromUniqueKey__c = 1; upsert raes; List fsdList = [SELECT Id,Name,SortInt__c,Is_Body__c,Fixture_Set__c FROM Fixture_Set_Detail__c WHERE Fixture_Set__c = :fsList[0].Id AND Is_Body__c = true]; System.debug('zyhtest======fsdList'+fsdList+'========111;;;'); // 配套明细有数据新建备品一览明细 if (fsdList.size() > 0) { System.debug('zyhtest======fsdList'+fsdList+'========;;;'); Rental_Apply_Equipment_Set_Detail__c raesd = new Rental_Apply_Equipment_Set_Detail__c(); raesd.Name = '*'; raesd.Rental_Apply__c = Trigger.new[0].Id; raesd.Fixture_Set_Detail__c = fsdList[0].Id; raesd.Rental_Num__c = 1; raesd.Rental_Apply_Equipment_Set__c = raes.Id; raesd.Is_Body__c = true; raesd.Equipment_Type_text__c = repList[0].Delivered_Product__r.Equipment_Type__c; raesd.Product_category_text__c = repList[0].Delivered_Product__r.Product_category__c; raesd.IndexFromUniqueKey__c = 1; raesd.IndexFromUniqueKey_Text__c = '0'+fsdList[0].SortInt__c + ''; raesd.Salesdepartment_before__c = repList[0].Delivered_Product__r.Salesdepartment__c; // raesd.Repair__c = reList[0].Id; upsert raesd; // 第一条备品配套一览明细赋值-2023-11-15 raes.First_RAESD__c = raesd.Id; update raes; } } } // List fsList = [SELECT Id,Name,Fixture_Set_Body_Model_No__c FROM Fixture_Set__c WHERE Fixture_Set_Body_Model_No__c = :repList[0].Delivered_Product__r.Fixture_Model_No_F__c]; } if(opdRaIdList.size()>0){ //查询所有的OPD的 计划中借出备品 再申请的OPD不走这里逻辑 Map opdMap = new Map([SELECT Id,PlanProdDetail__c,Reapply__c FROM OPDPlan__c WHERE Id IN :opdRaIdList AND Reapply__c = false]); //所有的配套型号全部取出来 List fixtureModels = new List(); //所有OPD涉及到的配套 for(OPDPlan__c opd : opdMap.values()){ if(opd.PlanProdDetail__c != null){ List fixSetStrings = opd.PlanProdDetail__c.split(';'); if(fixSetStrings.size() > 0){ for(String fixSet : fixSetStrings){ String tempString = fixSet.trim(); if(tempString.indexOf('*')!= -1){ fixtureModels.add(tempString.substring(0, tempString.indexOf('*'))); } } } } } // 借用机会可视化-判断空 2023-12-29 zyh start if (fixtureModels.size() > 0) { List fixSets = [SELECT Id, Fixture_Set_Body_Model_No__c FROM Fixture_Set__c WHERE Fixture_Set_Body_Model_No__c IN :fixtureModels]; if (fixSets.size() > 0) {// 借用机会可视化-判断空 2023-12-29 zyh Map fixBodyModelMap = new Map(); for(Fixture_Set__c fs : fixSets){ if(!fixBodyModelMap.containsKey(fs.Fixture_Set_Body_Model_No__c)){ fixBodyModelMap.put(fs.Fixture_Set_Body_Model_No__c, fs); } } System.debug('fixBodyModelMap====='+fixBodyModelMap); Map fixMap = new Map([SELECT Id,Fixture_Set_Body_Model_No__c FROM Fixture_Set__c WHERE Fixture_Set_Body_Model_No__c IN :fixtureModels ORDER BY Name]); List fixSetDetails = [SELECT Id, SortInt__c, Fixture_Set__c FROM Fixture_Set_Detail__c WHERE Is_Body__c = true AND Fixture_Set__c IN :fixSets]; //配套和配套明细的关系 <配套Id, List<明细>> Map> setDetalMap = new Map>(); for(Fixture_Set_Detail__c fixDetail : fixSetDetails){ if(setDetalMap.containsKey(fixDetail.Fixture_Set__c)){ setDetalMap.get(fixDetail.Fixture_Set__c).add(fixDetail); }else{ List temp = new List(); temp.add(fixDetail); setDetalMap.put(fixDetail.Fixture_Set__c,temp); } } List insertRaSet = new List(); List insertRaSetDetail = new List(); //给各个申请单分配一览和一览明细 for(Rental_Apply__c ra : Trigger.new){ if(opdMap.containsKey(ra.OPDPlan__c)){ //一览 添加 //每一单对应的配套 // 借用机会可视化-空判断 2023-12-29 zyh start List tempfixSetStrings = new List(); if (String.isNotBlank(opdMap.get(ra.OPDPlan__c).PlanProdDetail__c)) { tempfixSetStrings = opdMap.get(ra.OPDPlan__c).PlanProdDetail__c.split(';'); } // List tempfixSetStrings = opdMap.get(ra.OPDPlan__c).PlanProdDetail__c.split(';'); // 借用机会可视化-空判断 2023-12-29 zyh end if(tempfixSetStrings.size()>0){ for(String s : tempfixSetStrings){ String tempString = s.trim(); System.debug('tempString====='+tempString); if(tempString.indexOf('*')!= -1 && fixBodyModelMap.containskey(tempString.substring(0, tempString.indexOf('*'))) ){ Rental_Apply_Equipment_Set__c raeSet = new Rental_Apply_Equipment_Set__c(); raeSet.Name = '*'; raeSet.Rental_Apply__c = ra.Id; raeSet.Fixture_Set__c = fixBodyModelMap.get(tempString.substring(0, tempString.indexOf('*'))).Id; raeSet.IndexFromUniqueKey__c = 1; insertRaSet.add(raeSet); } } } } } System.debug('insertRaSet===='+insertRaSet); //先Insert 一览 再创建一览明细 if(insertRaSet.size()>0){ INSERT insertRaSet; //一览明细添加 for(Rental_Apply_Equipment_Set__c rae : insertRaSet){ if(fixMap.containsKey(rae.Fixture_Set__c)){ Rental_Apply_Equipment_Set_Detail__c raesdel = new Rental_Apply_Equipment_Set_Detail__c(); raesdel.Name = '*'; raesdel.Rental_Apply__c = rae.Rental_Apply__c; raesdel.Fixture_Set_Detail__c = setDetalMap.get(rae.Fixture_Set__c)[0].Id; raesdel.Rental_Num__c = 1; raesdel.Rental_Apply_Equipment_Set__c = rae.Id; raesdel.Is_Body__c = true; raesdel.IndexFromUniqueKey__c = 1; raesdel.IndexFromUniqueKey_Text__c = setDetalMap.get(rae.Fixture_Set__c)[0].SortInt__c + ''; insertRaSetDetail.add(raesdel); } } //插入一览明细 if(insertRaSetDetail.size()>0){ INSERT insertRaSetDetail; //更新一览的第一条备品配套明细 for(Rental_Apply_Equipment_Set__c rae : insertRaSet){ for(Rental_Apply_Equipment_Set_Detail__c raesd : insertRaSetDetail){ if(rae.Id == raesd.Rental_Apply_Equipment_Set__c){ rae.First_RAESD__c = raesd.Id; } } } UPDATE insertRaSet; } } } } // List fixSets = [SELECT Id, Fixture_Set_Body_Model_No__c FROM Fixture_Set__c WHERE Fixture_Set_Body_Model_No__c IN :fixtureModels]; // 借用机会可视化-判断空 2023-12-29 zyh end } } // 2023-10-31 zyh 智能化 end // 2023-10-26 zyh 智能化 start System.debug('tempCheck=start=='+tempCheck); System.debug('StaticParameter.EscapeRaTrigger=start=='+StaticParameter.EscapeRaTrigger); if (Trigger.isUpdate) { List raIdList = new List(); List ra614List = new List(); for (Rental_Apply__c upRa : Trigger.new){ Rental_Apply__c oldRa = Trigger.oldMap.get(upRa.Id); // 有修理,满足触发条件推送接口数据 if ((upRa.Shippment_loaner_time__c != oldRa.Shippment_loaner_time__c || // 备品中心出库日,发生变化 // upRa.QueueShippmentDate__c != oldRa.QueueShippmentDate__c || // 排队备品预计出库时间,发生变化 upRa.Return_dadeline_final__c != oldRa.Return_dadeline_final__c || // 最新预定归还日,发生变化 // (upRa.Rental_Status__c == '已分配' && oldRa.Rental_Status__c == '已批准') || upRa.QueueShippmentDate__c != oldRa.QueueShippmentDate__c || upRa.Rental_Status__c != oldRa.Rental_Status__c || upRa.Cancel_time__c != oldRa.Cancel_time__c) && // 备品申请取消日,发生变化 upRa.Repair__c != null && upRa.Demo_purpose1__c == '维修代用' && upRa.Rental_Status__c != '草案中' && upRa.Rental_Status__c != '申请中' && upRa.Rental_Status__c != '审批中(OPD未通过)') { System.debug('QueueShippmentDate__c=' + upRa.QueueShippmentDate__c + '///' + oldRa.QueueShippmentDate__c + ';;Shippment_loaner_time__c=' + upRa.Shippment_loaner_time__c + '///' + oldRa.Shippment_loaner_time__c + ';;Return_dadeline_final__c=' + upRa.Return_dadeline_final__c + '///' + oldRa.Return_dadeline_final__c + ';;Cancel_time__c=' + upRa.Cancel_time__c + '///' + oldRa.Cancel_time__c); System.debug('QueueShippmentDate__c=' + (upRa.QueueShippmentDate__c == oldRa.QueueShippmentDate__c) + ';;Shippment_loaner_time__c=' + (upRa.Shippment_loaner_time__c == oldRa.Shippment_loaner_time__c) + ';;Return_dadeline_final__c=' + (upRa.Return_dadeline_final__c == oldRa.Return_dadeline_final__c) + ';;Cancel_time__c=' + (upRa.Cancel_time__c == oldRa.Cancel_time__c)); ra614List.add(upRa.Id); } // 使用目的1是维修待用和协议借用的,或者使用目的2是已购待货,批准通过后推送分单Request_approval_time__c // if (upRa.Rental_Status__c == '已批准' && oldRa.Rental_Status__c != '已批准' && (upRa.Demo_purpose1__c == '维修代用' || upRa.Demo_purpose1__c == '协议借用' || upRa.demo_purpose2__c == '已购待货')){ System.debug('zyetest===upRa.Status__c' + upRa.Status__c + 'oldRa.Status__c' + oldRa.Status__c); String RecordTypeId = Schema.SObjectType.Rental_Apply__c.getRecordTypeInfosByDeveloperName().get('AgencyRequest').getRecordTypeId(); // 记录类型 if (RecordTypeId != upRa.RecordTypeId && upRa.Status__c == '已批准' && oldRa.Status__c != '已批准' && (upRa.Demo_purpose1__c == '维修代用' || upRa.Demo_purpose1__c == '协议借用' || upRa.demo_purpose2__c == '已购待货')){ raIdList.add(upRa.Id); } } // 智能化接口推送 if (ra614List.size() > 0 && StaticParameter.EscapeRaTrigger == false) { System.debug('NFM614====' + ra614List); BatchIF_Log__c iflog = new BatchIF_Log__c(); iflog.Type__c = 'NFM614'; iflog.Log__c = 'callout start\n'; System.debug('NFM614===RentalApplyToApp====callout start' + ra614List); System.debug('NFM614===RentalApplyToApp====callout start' + Datetime.now()); System.debug('NFM614===RentalApplyToApp====callout start' + ra614List.size()); insert iflog; // 2023-12-2 zyh 跳过Batch用户 start // NFM614Controller.callout(iflog.Id, ra614List); String uid = UserInfo.getUserId(); String BUid = System.Label.Batch_User_Id; String OLYid = System.Label.OlympusSystem_ID; System.debug('zheli'); if (System.isBatch()) { // if (uid.substring(0,15) == BUid.substring(0,15) || uid.substring(0,15) == OLYid.substring(0,15)) { NFM614Controller.executefuture(iflog, ra614List); }else{ NFM614Controller.callout(iflog.Id, ra614List); } // 2023-12-2 zyh 跳过Batch用户 end tempCheck = true; StaticParameter.EscapeRaTrigger = true; System.debug('tempCheck=end=='+tempCheck); System.debug('StaticParameter.EscapeRaTrigger=end=='+StaticParameter.EscapeRaTrigger); } if (raIdList.size() > 0) { System.debug('zyhtest=====Trigger=raIdList:'+raIdList); // 调用Batch进行分单/分配——同步进行 20231209 zyh start // AuthRentalApplySplitBatch.toSplitRentalApply(raIdList,true); AuthRentalApplySplitBatch.toSplitRentalApply(raIdList,true); // Database.executeBatch(new AuthRentalApplySplitBatch(raIdList),1); // AuthRentalApplySplitController arasc = new AuthRentalApplySplitController(); // arasc.init(raIdList); // 调用Batch进行分单/分配——同步进行 20231209 zyh end } } // 2023-10-26 zyh 智能化 end if (Trigger.isUpdate || Trigger.isDelete) { for (Rental_Apply__c local : Trigger.old) { // 2020/11/3 songxiaoqi start 更新申请时,更新前不是取消,然后更新成取消的时候计算 Rental_Apply__c news =null; if (Trigger.isUpdate) { news = Trigger.newMap.get( local.Id ); } // 两种情况需要更新: // 1、删除并且 old包含学会培训; // 2、更新,new 或 old 中包含学会培训,并且状态发生变化 ; //20231123 sx 备品智能化项目 自动创建申请单跳过 !local.Is_Auto__c 手工分单分单申请单该字段(Is_Auto__c)默认为false会正常走进逻辑 if ( Trigger.isUpdate && String.isNotEmpty( news.Campaign__c ) && news.Is_Auto__c != null && !news.Is_Auto__c || (Trigger.isDelete && String.isNotEmpty( local.Campaign__c ) ) || (Trigger.isUpdate && (String.isNotEmpty(local.Campaign__c) || String.isNotEmpty(news.Campaign__c) ) && ( (local.RA_Status__c !=news.RA_Status__c && news.RA_Status__c=='取消')|| (local.Request_approval_day__c != news.Request_approval_day__c) || (local.Campaign__c != news.Campaign__c ) ) ) ){ // 2020/11/3 songxiaoqi end // 如果老的备品借出申请的学会不为空,加入 if( String.isNotEmpty( local.Campaign__c ) ){ CampaignID.add( local.Campaign__c ); } // 如果新的备品借出申请的学会不为空,加入 if( String.isNotEmpty( news.Campaign__c ) ){ CampaignID.add( news.Campaign__c ); } } } } System.debug('CampaignID==='+ CampaignID); if (CampaignID.size () > 0) { List TemRentalApplies = [select Count(Id) Cnt_Id, Campaign__c, min(Request_approval_day__c) RADay from Rental_Apply__c where Campaign__c in: CampaignID and RA_Status__c != '取消' group by Campaign__c ]; map> TemRentalAppliesMap = new map>(); for (AggregateResult TemRentalApply : TemRentalApplies) { list temStringList = new list(); temStringList.add(string.valueOf( TemRentalApply.get('Cnt_Id'))); if (TemRentalApply.get('RADay') != null) { temStringList.add(((Date)TemRentalApply.get('RADay')).format()); } TemRentalAppliesMap.put( (ID) TemRentalApply.get('Campaign__c'), temStringList); } list UpdateCampaignList = new list(); for (Campaign TemCampaign : [select id, Number_Rental_Apply__c from Campaign where id in: CampaignID //2020/11/3 songxiaoqi start 创建申请后,草案中的时候计算单数 and Status != '取消' //2020/11/3 songxiaoqi end ]) { list temStringList = TemRentalAppliesMap.get(TemCampaign.id); if (temStringList != null) { integer RentalApplyNumber = integer.valueof(temStringList[0]); TemCampaign.Number_Rental_Apply__c = RentalApplyNumber; if (temStringList.size() > 1) { Date tempRADay = date.parse(temStringList[1]); TemCampaign.Request_approval_day_RA__c = tempRADay; } else { TemCampaign.Request_approval_day_RA__c = null; } } else { TemCampaign.Number_Rental_Apply__c = 0; TemCampaign.Request_approval_day_RA__c = null; } UpdateCampaignList.add(TemCampaign); } if (UpdateCampaignList.size() > 0) { upsert UpdateCampaignList; } } //SWAG-B3U63C 2018/8/21 更新学会培训的申请备品申请单数 end } }