/* * 2021-04-16 mzy * 每天凌晨跑batch查找 是否更新保有设备字段 为true的点检报告书,并更新保有设备,更新成功后把点检报告书的勾取消。 */ global class UpdateInspectionReportAssetBatch implements Database.Batchable,Database.stateful { Boolean IsNeedExecute = false; String tempReportId =''; List updateReportList = new List(); global UpdateInspectionReportAssetBatch() { } global UpdateInspectionReportAssetBatch(String tempId) { this.tempReportId = tempId; } global UpdateInspectionReportAssetBatch(Boolean NeedExecute) { this.IsNeedExecute = NeedExecute; } global Database.QueryLocator start(Database.BatchableContext bc) { //查询 是否更新保有设备 为true的点检报告书 String query = 'SELECT Id FROM Inspection_Report__c WHERE if_UpdateAsset__c = true '; //query += ' AND Name != null AND Name = null'; if(String.isNotBlank(this.tempReportId)){ query += ' AND Id = :tempReportId'; } return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, list InspectionReportList) { //查询点检报告书下的点检明细中的保有设备(后面也需要将此id的报告书的勾取消掉) list selectId = new list(); for(Inspection_Report__c i : InspectionReportList){ selectId.add(i.Id); } // 点检报告书中所有的保有设备 List assIds = new List(); Map assMap = new Map(); List iis = [select id, AssetId__c from Inspection_Item__c where Inspection_ReportId__c in :selectId]; for (Inspection_Item__c ii : iis) { if (ii.AssetId__c != null && assMap.containsKey(ii.AssetId__c) == false) { assIds.add(ii.AssetId__c); assMap.put(ii.AssetId__c, ii.AssetId__c); } } // 保有设备对应的所有点检报告明细 List iiList = [select id, AssetId__c, Inspection_ReportId__c, Inspection_Result__c, Inspection_Comment__c, Inspection_ReportId__r.Name, Inspection_ReportId__r.Inspection_Date__c,Inspection_ReportId__r.Reporter__c,Inspection_ReportId__r.Approved_date__c from Inspection_Item__c where AssetId__c = :assIds order by Inspection_ReportId__r.Approved_date__c desc]; Map iiMap = new Map(); for (Inspection_Item__c ii : iiList) { if (iiMap.containsKey(ii.AssetId__c) == false && ii.Inspection_ReportId__r.Approved_date__c != null) { iiMap.put(ii.AssetId__c, ii); } } List needUpdAssetList = new List(); for (String assid : assIds) { Inspection_Item__c tmp = iiMap.get(assid) == null ? new Inspection_Item__c() : iiMap.get(assid); Asset ass = new Asset( Id = assid, Inspection_report_number__c = tmp.Inspection_ReportId__r.Name, Inspection_Report__c = tmp.Inspection_ReportId__c, Inspection_Comment__c = tmp.Inspection_Comment__c, Inspection_Result__c = tmp.Inspection_Result__c, Final_Examination_Date__c = tmp.Inspection_ReportId__r.Inspection_Date__c, Last_Inspection_staff__c = tmp.Inspection_ReportId__r.Reporter__c ); needUpdAssetList.add(ass); } if (needUpdAssetList.size() > 0){ update needUpdAssetList; //将更新后的点检报告书的 是否更新保有设备的勾 取消掉 for(String i : selectId){ Inspection_Report__c tempReprot = new Inspection_Report__c(); tempReprot.Id = i; tempReprot.if_UpdateAsset__c = false; updateReportList.add(tempReprot); } } } global void finish(Database.BatchableContext BC) { // 更新后 将点检报告书的 是否更新保有设备的勾 取消掉 if(updateReportList.size()>0){ update updateReportList; } //2021-04-21 mzy add SFDCBatch合并 start if(!Test.isRunningTest() &&IsNeedExecute==true){ //batch里调用下一个batch时,希望跟原有的Schedule里面传的条数保持一致 Id execBTId = Database.executebatch(new AssetUpdateContractBatch(true),5); } //2021-04-21 mzy add SFDCBatch合并 end } //2021-09-01 mzy 希望用点检Trigger 来调用一下Batch异步更新 保有设备的信息 完成更新 start @Future WebService static void updateAssetFun(List InpIdList){ List IpsList = [SELECT Id,Status__c FROM Inspection_Report__c where Id IN :InpIdList]; List SQZ_List = new List(); if(IpsList.size()>0){ for(Inspection_Report__c ir :IpsList){ if('申请中'.equals(ir.status__c)){ SQZ_List.add(ir.Id); } } } // 点检报告书中所有的保有设备 List assIds = new List(); Map assMap = new Map(); List iis = [select id, AssetId__c,Inspection_ReportId__c,Inspection_ReportId__r.Inspection_Date__c,Inspection_ReportId__r.Name from Inspection_Item__c where Inspection_ReportId__c in :InpIdList]; Set assSet = new Set(); Map assIiMap = new Map(); for (Inspection_Item__c ii : iis) { //批准 if (ii.AssetId__c != null && assMap.containsKey(ii.AssetId__c) == false&&!SQZ_List.contains(ii.Inspection_ReportId__c)) { assIds.add(ii.AssetId__c); assMap.put(ii.AssetId__c, ii.AssetId__c); } //申请中 if(SQZ_List.contains(ii.Inspection_ReportId__c)&&ii.AssetId__c!=null){ assSet.add(ii.AssetId__c); assIiMap.put(ii.AssetId__c,ii); } } //申请中的需要将点检日赋值到设备上 if(assSet.size()>0){ List needUpdAssetList_SQZ = new List(); for(String assId :assSet){ Asset ass = new Asset(); ass.Id = assId; ass.Final_Examination_Date__c = assIiMap.get(assId).Inspection_ReportId__r.Inspection_Date__c; ass.Inspection_report_number__c = assIiMap.get(assId).Inspection_ReportId__r.Name; needUpdAssetList_SQZ.add(ass); } update needUpdAssetList_SQZ; } if(assIds.size()==0){ //没有批准了的点检报告书则不需要走下面的代码 return; } // 保有设备对应的所有点检报告明细 List iiList = [select id, AssetId__c, Inspection_ReportId__c, Inspection_Result__c, Inspection_Comment__c, Inspection_ReportId__r.Name, Inspection_ReportId__r.Inspection_Date__c,Inspection_ReportId__r.Reporter__c,Inspection_ReportId__r.Approved_date__c from Inspection_Item__c where AssetId__c = :assIds order by Inspection_ReportId__r.Approved_date__c desc]; Map iiMap = new Map(); for (Inspection_Item__c ii : iiList) { if (iiMap.containsKey(ii.AssetId__c) == false && ii.Inspection_ReportId__r.Approved_date__c != null) { iiMap.put(ii.AssetId__c, ii); } } List needUpdAssetList = new List(); for (String assid : assIds) { Inspection_Item__c tmp = iiMap.get(assid) == null ? new Inspection_Item__c() : iiMap.get(assid); Asset ass = new Asset( Id = assid, Inspection_report_number__c = tmp.Inspection_ReportId__r.Name, Inspection_Report__c = tmp.Inspection_ReportId__c, Inspection_Comment__c = tmp.Inspection_Comment__c, Inspection_Result__c = tmp.Inspection_Result__c, Final_Examination_Date__c = tmp.Inspection_ReportId__r.Inspection_Date__c, Last_Inspection_staff__c = tmp.Inspection_ReportId__r.Reporter__c ); needUpdAssetList.add(ass); } if (needUpdAssetList.size() > 0){ update needUpdAssetList; } } //2021-09-01 mzy 希望用点检Trigger 来调用一下Batch异步更新 保有设备的信息 完成更新 end }