trigger Repair on Repair__c (before insert, after insert, before update, after update, after delete, before delete) { if(Test.isRunningTest()||UserInfo.getUserId()!=System.Label.ByPassTrigger){ RepairHandler handler = new RepairHandler(); handler.run(); System.debug( '-----: trigger start'); test(); if ( Trigger.isBefore && Trigger.isUpdate) { RepairTrigger.CheckUpdate(Trigger.old, Trigger.newMap); } // ---------------------------------------------------------------------- // wangweipeng 20210727 start // 新增修理时,如果直返收货地址的信息都为空,那么就根据医院的 OCSM管理省(文本) 字段来匹配地址表里 省和市字段 // 如果能匹配到那么默认是这条新增的修理收货地址 // ---------------------------------------------------------------------- if ( Trigger.isBefore && Trigger.isInsert) { RepairBeforeInsertHandler ribt = new RepairBeforeInsertHandler(); ribt.beforeInsertValue(Trigger.new,Trigger.old); } //wangweipeng 20210727 end if ((Trigger.isAfter && Trigger.isInsert) || (Trigger.isAfter && Trigger.isUpdate) || (Trigger.isAfter && Trigger.isDelete)) { // if(!(System.isFuture()||System.isBatch())){// Add By Lijun 20220303 to avoid mutiple execute NFM103Controller.NFM103Trigger(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap); NFM603Controller.NFM603Trigger(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap); RepairTrigger.UpdateAssert(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap); // } } // ---------------------------------------------------------------------- // ここより、修理のサービスコントラクト項目を自動的に更新するロジック // ---------------------------------------------------------------------- if ( Trigger.isBefore && (Trigger.isInsert || Trigger.isUpdate)) { //先款后修-修理增加先款标识 thh 20220322 start RepairTrigger.AdvancePaymentFlagUpsert(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap); //先款后修-修理增加先款标识 thh 20220322 end // 納入機器IDを一意に格納する Setです。 Set assetIds = new Set(); // 納入機器の一意のIDを得る for ( Repair__c repair : Trigger.New) { if (String.isBlank(repair.Delivered_Product__c) == false) assetIds.add( repair.Delivered_Product__c); } // 有効なサービス契約の Mapを得る // arg1は納入機器のID, arg2は納入機器のIDのサービス契約一覧 // 区分虚拟维修合同和正常维修合同 // 正常维修合同保有设备集合 Map> effectiveContracts = new Map>(); // 虚拟维修合同保有设备集合 Map> effectiveContractsVM = new Map>(); List contracts = OncallFinalStatusManager.selectMaintenance_Contract_Asset_List(assetIds); for (Maintenance_Contract_Asset__c local : contracts) { if (local.Maintenance_Contract__r.RecordType.DeveloperName == 'VM_Contract') { List middleTableVMList = effectiveContractsVM.get(local.Asset__c); if (middleTableVMList == null) { middleTableVMList = new List(); effectiveContractsVM.put(local.Asset__c, middleTableVMList); } middleTableVMList.add(local); } else { List middleTableList = effectiveContracts.get(local.Asset__c); if (middleTableList == null) { middleTableList = new List(); effectiveContracts.put(local.Asset__c, middleTableList); } middleTableList.add(local); } } System.debug( '-----: 维修合同开始'); // 本題のロジック for ( Repair__c repair : Trigger.New) { //add wangweipeng 2021/12/09 start boolean defaultFlag = true; //add wangweipeng 2021/12/09 end // 草案中修理だけ更新 // GZW 特殊处理 跳过维修中心自动赋值,以手选为准 start // 判断条件追加 && repair.Exc_work_location__c == false if(repair.Exc_work_location__c){ defaultFlag = false; } // GZW 特殊处理 跳过维修中心自动赋值,以手选为准 start if ((repair.Status__c == '草案中' || String.isBlank(repair.Status__c)) == false) { // if (Trigger.isUpdate && repair.SAP_Transfer_time__c == null) { if (Trigger.isUpdate && repair.SAP_Transfer_time__c == null && repair.Exc_work_location__c == false) { repair = RepairTrigger.updateWorkLocationSelect(repair, null); defaultFlag = false; } continue; } System.debug( '-----:自动带出维修合同'); // 修理の「故障発生日」が、サービス契約の「契約開始日」〜「契約終了日」に含まれるか? List middleTableList = effectiveContracts.get(repair.Delivered_Product__c); Boolean needsetnull = true; System.debug( '-----:自动带出维修合同11111' + middleTableList); // if (middleTableList == null) { if (middleTableList == null && repair.Exc_work_location__c == false) { if ((repair.NewProductGuarante_Txt__c == '2: 多年保修' || repair.NewProductGuarante_Txt__c == '2: 服务多年保修' || repair.NewProductGuarante_Txt__c == '8: 市场多年保修') && (repair.Sales_Branch__c != repair.Finance_of_Branch__c) && repair.SAP_Transfer_time__c == null) { repair = RepairTrigger.updateWorkLocationSelect(repair, null); defaultFlag = false; } } if (middleTableList != null) for (Maintenance_Contract_Asset__c middleTable : middleTableList) { if (repair.SERVICE_CONTRACT_JUDEGE_DAY__C != null && repair.SERVICE_CONTRACT_JUDEGE_DAY__C >= middleTable.Maintenance_Contract__r.Contract_Start_Date__c && repair.SERVICE_CONTRACT_JUDEGE_DAY__C <= middleTable.Maintenance_Contract__r.Contract_End_Date__c && middleTable != null && middleTable.Maintenance_Contract__r.Status__c == '契約' && middleTable.Maintenance_Contract__r.Contract_Start_Date__c != null && middleTable.Maintenance_Contract__r.Contract_End_Date__c != null ) { //限次合同产品信息维护相关 FXK 2021/03/05 Start //1.如果记录类型是维修合同 或者 记录类型是服务任务但不是URF限次合同,保持现状 //如果最大大修次数大于0,并且已经大修次数 小于 最大大修次数,那么保持现状 if (middleTable.Maintenance_Contract__r.RecordType.DeveloperName == 'Maintenance_Contract' || (middleTable.Maintenance_Contract__r.RecordType.DeveloperName == 'NewMaintenance_Contract' && (middleTable.Maintenance_Contract__r.URF_Contract__c != true || (middleTable.Maintenance_Contract__r.URF_Contract__c == true && (middleTable.Series_MaxRepairCount_F__c > 0 && middleTable.Series_RepairCount_F__c < middleTable.Series_MaxRepairCount_F__c))))) { repair.Maintenance_Contract__c = middleTable.Maintenance_Contract__c; // repair.Contract_Principal_Office__c = middleTable.Maintenance_Contract__r.SalesOfficeCode_selection__c; // system.debug('555555:' + middleTable.Maintenance_Contract__r.SalesOfficeCode_selection__c); // system.debug('mmmmmmmm:' + Trigger.isInsert); // system.debug('nnnnnnn:' + Trigger.isUpdate); repair.repairPlace__c = middleTable.Maintenance_Contract__r.SalesOfficeCode_selection__c; //新增逻辑 HWAG-BKP5FB 精琢科技 2020/03/19 Start //wangweipeng 发生数据到SAP以后,修理的维修中心不能做修改 // if(repair.SAP_Transfer_time__c == null){ if(repair.SAP_Transfer_time__c == null && repair.Exc_work_location__c == false){ repair = RepairTrigger.updateWorkLocationSelect(repair, middleTable); defaultFlag = false; } // 新增逻辑 HWAG-BKP5FB 精琢科技 2020/03/19 End // HWAG-BJABEY LHJ 2019/12/04 Start repair.MaintenanceContractType__c = middleTable.Maintenance_Contract__r.RecordType.Name; // HWAG-BJABEY LHJ 2019/12/04 End } //2.如果记录类型是服务任务并且是URF限次合同,如果最大大修次数为0或者空,那么直接add Error报错 让联系服务管理部; if (middleTable.Maintenance_Contract__r.RecordType.DeveloperName == 'NewMaintenance_Contract' && middleTable.Maintenance_Contract__r.URF_Contract__c == true) { if (middleTable.Series_MaxRepairCount_F__c == 0 || middleTable.Series_MaxRepairCount_F__c == null) { //直接add Error报错 让联系服务管理部 repair.addError('修理设备不是限次设备,请联系服务管理部'); } //如果最大大修次数大于0,并且已经大修次数 大于或等于 最大大修次数,那么不仅不赋值维修合同信息,而且清空当前信息 if (middleTable.Series_MaxRepairCount_F__c > 0 && middleTable.Series_RepairCount_F__c >= middleTable.Series_MaxRepairCount_F__c) { //不赋值维修合同信息,而且清空当前信息 repair.Maintenance_Contract__c = null; repair.MaintenanceContractType__c = null; } } //限次合同产品信息维护相关 FXK 2021/03/05 END needsetnull = false; System.debug( '-----:自动带出维修合同22222');//把保有设备上的维修合同存到修理上 break; } } //MaintenanceContractType__c:维修合同记录类型 /*如果不在合同中,则将1.‘修理’中的‘维修合同’和‘修理’中的‘维修合同记录类型’清空*/ if (needsetnull) { System.debug( '-----:nullにせよ'); repair.Maintenance_Contract__c = null; repair.MaintenanceContractType__c = null; } System.debug( '-----: repair=' + repair); System.debug( '-----: repair.Maintenance_Contract__c=' + repair.Maintenance_Contract__c); System.debug( '-----: repair.SERVICE_CONTRACT_JUDEGE_DAY__C=' + repair.SERVICE_CONTRACT_JUDEGE_DAY__C); // 设备修理时,自动带出虚拟维修合同 List middleTableVMList = effectiveContractsVM.get(repair.Delivered_Product__c); // Boolean needsetnull = true; System.debug( '-----:自动带出虚拟维修合同'); System.debug( '-----:自动带出虚拟维修合同' + middleTableVMList); // if (middleTableVMList == null) { if (middleTableVMList == null && repair.Exc_work_location__c == false) { if ((repair.NewProductGuarante_Txt__c == '2: 多年保修' || repair.NewProductGuarante_Txt__c == '2: 服务多年保修' || repair.NewProductGuarante_Txt__c == '8: 市场多年保修') && (repair.Sales_Branch__c != repair.Finance_of_Branch__c)) { repair = RepairTrigger.updateWorkLocationSelect(repair, null); defaultFlag = false; } } if (middleTableVMList != null) for (Maintenance_Contract_Asset__c middleTable : middleTableVMList) { if (repair.SERVICE_CONTRACT_JUDEGE_DAY__C != null && repair.SERVICE_CONTRACT_JUDEGE_DAY__C >= middleTable.startDateGurantee_Text__c && repair.SERVICE_CONTRACT_JUDEGE_DAY__C <= middleTable.endDateGurantee_Text__c && middleTable != null && middleTable.Maintenance_Contract__r.Status__c == '契約' && middleTable.startDateGurantee_Text__c != null && middleTable.endDateGurantee_Text__c != null ) { repair.VM_Maintenance_Contract__c = middleTable.Maintenance_Contract__c; needsetnull = false; //新增逻辑 SLIU-BMMDWK 精琢科技 2020/03/17 Start // if (repair.VM_Maintenance_Contract__c != null) { if (repair.VM_Maintenance_Contract__c != null && repair.Exc_work_location__c == false) { repair = RepairTrigger.updateWorkLocationSelect(repair, middleTable); defaultFlag = false; } // 新增逻辑 SLIU-BMMDWK 精琢科技 2020/03/17 End break; } } if (needsetnull) { System.debug( '-----:nullにせよ'); repair.VM_Maintenance_Contract__c = null; } //add wangweipeng 2021/12/10 start if(defaultFlag){ //一般修理品的维修中心赋值逻辑 //SAP上传修理时间 if(repair.SAP_Transfer_time__c == null){ if(repair.On_site_repair__c == 'RC修理'||repair.On_site_repair__c== '直送SORC修理'||repair.On_site_repair__c== '直送OGZ修理' ){ System.debug('-----------------11------'); repair = RepairTrigger.generalUpdateWorkLocationSelect(repair); } } } //add wangweipeng 2021/12/10 end } System.debug( '-----: 维修合同结束'); // 20160727 add 计算修理工作日 RepairTrigger.setRepairWorkday(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap); // if (Trigger.isUpdate) { /****************************************************************************************************/ //迁移进程生成器中repair Alltime功能 Start /****************************************************************************************************/ for (Repair__c a : Trigger.new) { String StatusStr = ''; if (a.Delete_Flag__c == true) { StatusStr = '0.删除'; } else if (a.RepairOrderStatusCode__c == 'A99' && a.IncorrectDataComment__c != null) { StatusStr = '0.删除'; } else if ((a.RepairOrderStatusCode__c == 'A95' || a.RepairOrderStatusCode__c == 'A96') && a.Return_Without_Repair_IF__c == true) { StatusStr = '0.取消'; } else if (a.Finish_Check__c == 1) { StatusStr = '5.完毕'; } else if (a.Facility_Return_Receipt_Collection_Date__c != null || a.Repair_Returned_To_HP_Date__c != null || a.Repair_Shipped_Date__c != null) { StatusStr = '4.修理品返送阶段'; } else if (a.Repair_Final_Inspection_Date__c != null || a.Repair_Completed_Date__c != null || a.Repair_Start_Date__c != null) { StatusStr = '3.维修阶段'; } else if (a.Agreed_Date__c != null || a.Repair_Discount_Date__c != null || a.Repair_Estimated_Date__c != null || a.Repair_Inspection_Date__c != null) { StatusStr = '2.维修报价阶段'; } else { StatusStr = a.Status__c; } a.Status__c = a.Status1__c; // DOJ2.1 gzw AwareDate公式考文本 start if (a.AwareDate__c != a.Aware_date__c && (a.Aware_date__c >= Date.newInstance(2021, 9, 1) || a.AwareDate__c >= Date.newInstance(2021, 9, 1) )) { a.Aware_date__c = a.AwareDate__c; } // DOJ2.1 gzw AwareDate公式考文本 end /****************************************************************************************************/ //迁移进程生成器中repair Alltime功能 End /****************************************************************************************************/ } } } // ---------------------------------------------------------------------- // ここまで、サービスコントラクト項目を自動的に更新するロジック // ---------------------------------------------------------------------- // ---------------------------------------------------------------------- // これより、On-Callの「On-Call跟进结果」を更新するロジック // ---------------------------------------------------------------------- if ( ( Trigger.isBefore && ( Trigger.isInsert || Trigger.isUpdate)) || ( Trigger.isAfter && Trigger.isDelete)) { // 処理対象となる修理を全部確保 List repairs = ( Trigger.isBefore ? Trigger.New : new List()); Set cncallIds = new Set(); for ( Repair__c repair : ( Trigger.isBefore ? Trigger.New : Trigger.Old)) { if (String.isBlank(repair.On_Call_ID__c) == false) { cncallIds.add( repair.On_Call_ID__c); } } // 処理対象となるオンコールを全部確保 // 20210622 SQL优化 Start // List oncalls = OncallFinalStatusManager.getOncallList(cncallIds); List oncalls = new List(); if (cncallIds.size() > 0 ) { oncalls = OncallFinalStatusManager.getOncallList(cncallIds); } // 20210622 SQL优化 End if (oncalls.size() > 0) { // 処理対象となるQISを全部確保 List qiss = OncallFinalStatusManager.getQisListFronOncalls(oncalls); // FinalStatus更新処理 OncallFinalStatusManager.setFinalStatus( oncalls, repairs, qiss); OncallFinalStatusManager.updOncalls(oncalls); } } // ---------------------------------------------------------------------- // ここまで、On-Callの「On-Call跟进结果」を更新するロジック // ---------------------------------------------------------------------- // ---------------------------------------------------------------------- // これより、备品借出申请の「修理最终检测日」を更新するロジック(更新后触发WorkFlow) // ---------------------------------------------------------------------- if (Trigger.isAfter && Trigger.isUpdate) { Map repairDateMap = new Map(); List targetRepairList = new List(); for (Repair__c repair : Trigger.New) { Repair__c oldRepair = Trigger.OldMap.get(repair.Id); if (oldRepair.Repair_Final_Inspection_Date__c != repair.Repair_Final_Inspection_Date__c) { repairDateMap.put(repair.Id, repair.Repair_Final_Inspection_Date__c); targetRepairList.add(repair.Id); } } // 20210622 SQL优化 Start //List raList = [select Id, Repair__c from Rental_Apply__c where Repair__c = :targetRepairList]; List raList = new List(); if (targetRepairList.size() > 0) { raList = [select Id, Repair__c from Rental_Apply__c where Repair__c = :targetRepairList]; } // 20210622 SQL优化 End for (Rental_Apply__c ra : raList) { ra.Repair_Final_Inspection_Date__c = repairDateMap.get(ra.Repair__c); } if (raList.size() > 0) { update raList; } } // ---------------------------------------------------------------------- // ここまで、备品借出申请の「修理最终检测日」を更新するロジック // ---------------------------------------------------------------------- System.debug( '-----: trigger end'); } public void test(){ Integer i =0; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; } }