/** * [SetFrameNumManageBatch 进口单证上传后查找字段batch更新] * @Author lijinhuan * @DateTime 2022-11-04T18:31:03+0800 * 测试类:FrameNumUploadControllerTest */ global without sharing class SetFrameNumManageBatch implements Database.Batchable, Database.Stateful{ public String query; public String Id; //邮件信息 List emailMessages = new List(); //报错的进口单证Id String logStr = '进口单证 : '; //报错信息 String errorStr = ''; //总件数 Integer totalCount = 0; // 失败件数 Integer failedCount = 0; global SetFrameNumManageBatch() { this.query = query; } global SetFrameNumManageBatch(String Id) { this.query = query; this.Id = Id; } global Database.QueryLocator start(Database.BatchableContext bc) { query = 'select Id,ManagementCode__c,InspectionCard__c,InspectionCard_Select__c,ApplyList__c,ApplyList_Select__c,'; // query += 'Statu_Achievements_DN_details__c,signInForm__c,Asset__c,ManagementCode__c,IsChange__c '; query += 'Asset__c,ScanDate__c,ScanDate_select__c,IsChange__c, DeliveryDate__c, DeliveryDate_select__c '; // query += 'IsChange__c '; query += ' from FrameNumManage__c where '; if(String.isNotBlank(Id)){ query += ' id = :Id'; }else{ // query += ' signInForm__c = null '; // query += ' OR Statu_Achievements_DN_details__c = null '; // query += '((signInForm__c = null OR Statu_Achievements_DN_details__c = null) AND AssertRecordType__c != \'Shipment\') '; // query += ' OR Asset__c = null '; // query += ' Asset__c = null '; query += ' OR (InspectionCard_Select__c = null AND InspectionCard__c != null AND InspectionCard__c !=\'不要\')'; // query += ' (InspectionCard_Select__c = null AND InspectionCard__c != null AND InspectionCard__c != \'\' AND InspectionCard__c !=\'不要\')'; query += ' OR (InspectionCard_Select__c != null AND (InspectionCard__c =\'不要\' OR InspectionCard__c = null OR InspectionCard__c = \'\'))';// 清空 query += ' OR (ApplyList_Select__c = null AND ApplyList__c != null AND ApplyList__c != \'\')'; query += ' OR (ApplyList_Select__c != null AND (ApplyList__c = null OR ApplyList__c =\'\'))';// 清空 query += ' OR (ScanDate__c != null AND ScanDate_select__c = null)'; query += ' OR IsChange__c = true'; } return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, list fnmList) { Map InspectionCardMap = new Map(); Map ApplyListMap = new Map(); Map InspectionCardIdMap = new Map(); Map ApplyListIdMap = new Map(); Set TracingCodeSet = new Set(); Set TracingCodeAssetSet = new Set(); Map clearMap = new Map(); Set ScanDateSet = new Set(); Map oldMap = new Map(); try{ for(FrameNumManage__c fnm:fnmList){ // 清空 // 0 all 1:ApplyList_Select__c 2:InspectionCard_Select__c if( ((String.isBlank(fnm.ApplyList__c) ||(!String.isBlank(fnm.ApplyList__c) && fnm.ApplyList__c == '不要')) &&!String.isBlank(fnm.ApplyList_Select__c)) && ((String.isBlank(fnm.InspectionCard__c) ||(!String.isBlank(fnm.InspectionCard__c) && fnm.InspectionCard__c == '不要')) &&!String.isBlank(fnm.InspectionCard_Select__c)) ){ clearMap.put(fnm.Id,'0'); }else if((String.isBlank(fnm.ApplyList__c) ||(!String.isBlank(fnm.ApplyList__c) && fnm.ApplyList__c == '不要')) &&!String.isBlank(fnm.ApplyList_Select__c)){ clearMap.put(fnm.Id,'1'); }else if((String.isBlank(fnm.InspectionCard__c) ||(!String.isBlank(fnm.InspectionCard__c) && fnm.InspectionCard__c == '不要')) &&!String.isBlank(fnm.InspectionCard_Select__c)){ clearMap.put(fnm.Id,'2'); } //赋值 // if(String.isBlank(fnm.signInForm__c) || String.isBlank(fnm.Statu_Achievements_DN_details__c)){ // TracingCodeSet.add(fnm.ManagementCode__c); //签收单 发货DN明细用 // } // System.debug('zheli03:'+String.isBlank(fnm.Asset__c)); if(String.isBlank(fnm.Asset__c)){ TracingCodeAssetSet.add(fnm.ManagementCode__c);// 保有设备用 } // System.debug('zheli02:'+TracingCodeAssetSet); InspectionCardMap.put(fnm.ManagementCode__c,fnm.InspectionCard__c); ApplyListMap.put(fnm.ManagementCode__c,fnm.ApplyList__c); if(fnm.ScanDate__c != null){ ScanDateSet.add(fnm.ScanDate__c); } oldMap.put(fnm.Id,fnm); } // 发货DN明细 // Map DNdetailMap = new Map(); // Map DNMap = new Map(); // Map AssetMap = new Map(); // for(Statu_Achievements_DN_details__c dn:[SELECT Id,TracingCode_Raw__c,Statu_Achievements_DN__c,Statu_Achievements_DN__r.Name,asset__c FROM Statu_Achievements_DN_details__c WHERE TracingCode_Raw__c IN: TracingCodeSet]){ // DNdetailMap.put(dn.TracingCode_Raw__c,dn.Id); // AssetMap.put(dn.TracingCode_Raw__c,dn.asset__c); // DNMap.put(dn.TracingCode_Raw__c,dn.Statu_Achievements_DN__r.Name); // } // // 签收单 // Map eSignFormMap = new Map(); // for(eSignForm__c es:[SELECT Id,DNName__c FROM eSignForm__c WHERE DNName__c IN: DNMap.values()]){ // for(String key:DNMap.keySet()){ // if(DNMap.get(key) == es.DNName__c){ // eSignFormMap.put(key,es.Id); // } // } // } // System.debug('zheli01:'+TracingCodeAssetSet); // 保有设备 Map AssetMap = new Map(); Map AssetDatas = new Map(); // 进口单证 增加发货日设置 start for(Asset ass:[SELECT Id,TracingCode__c,Posting_Date__c FROM Asset WHERE TracingCode__c IN: TracingCodeAssetSet]){ if(!AssetMap.containsKey(ass.TracingCode__c)){ AssetMap.put(ass.TracingCode__c,ass.Id); AssetDatas.put(ass.TracingCode__c,ass); } if (ass.Posting_Date__c != null) { ScanDateSet.add(ass.Posting_Date__c); } // AssetMap.put(ass.TracingCode__c,ass.Id); } // 进口单证 增加发货日设置 end // System.debug('zheli00:'+AssetMap); // 商检证 InspectionCard_Select__c 报关单 ApplyList_Select__c Set FilesNameSet = new Set(); FilesNameSet.addAll(InspectionCardMap.values()); FilesNameSet.addAll(ApplyListMap.values()); for(FileAddress__c fa:[SELECT Id,OnlyFileName__c FROM FileAddress__c WHERE ParentRecordId__c = 'FrameNumManage' AND OnlyFileName__c IN: FilesNameSet]){ for(String key:InspectionCardMap.keySet()){ if(InspectionCardMap.get(key) == fa.OnlyFileName__c){ InspectionCardIdMap.put(key,fa.Id); } if(ApplyListMap.get(key) == fa.OnlyFileName__c){ ApplyListIdMap.put(key,fa.Id); } } } // 扫描日期 Map ScanDateMap = new Map(); for(OlympusCalendar__c oc:[SELECT Id,Date__c FROM OlympusCalendar__c WHERE Date__c IN: ScanDateSet]){ ScanDateMap.put(oc.Date__c,oc.Id); } // 最后整合 List upFnmList = new List(); for(FrameNumManage__c fnm:fnmList){ FrameNumManage__c temp = new FrameNumManage__c(); temp.Id = fnm.Id; // if(DNdetailMap.size() > 0 && DNdetailMap.containsKey(fnm.ManagementCode__c)){ // temp.Statu_Achievements_DN_details__c = DNdetailMap.get(fnm.ManagementCode__c); // } // if(eSignFormMap.size() > 0 && eSignFormMap.containsKey(fnm.ManagementCode__c)){ // temp.signInForm__c = eSignFormMap.get(fnm.ManagementCode__c); // } if(AssetMap.size() > 0 && AssetMap.containsKey(fnm.ManagementCode__c)){ temp.Asset__c = AssetMap.get(fnm.ManagementCode__c); // 进口单证 增加发货日设置 start if(String.isNotBlank(temp.Asset__c) && AssetDatas.get(fnm.ManagementCode__c) != null && AssetDatas.get(fnm.ManagementCode__c).Posting_Date__c != null){ temp.DeliveryDate__c = AssetDatas.get(fnm.ManagementCode__c).Posting_Date__c; temp.DeliveryDate_select__c = ScanDateMap.get(AssetDatas.get(fnm.ManagementCode__c).Posting_Date__c); } // 进口单证 增加发货日设置 end } if(ScanDateMap.size() > 0 && ScanDateMap.containsKey(fnm.ScanDate__c)){ temp.ScanDate_Select__c = ScanDateMap.get(fnm.ScanDate__c); } if(clearMap.containsKey(fnm.Id)){ if(clearMap.get(fnm.Id) == '0'){ temp.ApplyList_Select__c = null; temp.InspectionCard_Select__c = null; }else if(clearMap.get(fnm.Id) == '1'){ temp.ApplyList_Select__c = null; }else if(clearMap.get(fnm.Id) == '2'){ temp.InspectionCard_Select__c = null; } }else{ temp.InspectionCard_Select__c = InspectionCardIdMap.get(fnm.ManagementCode__c); temp.ApplyList_Select__c = ApplyListIdMap.get(fnm.ManagementCode__c); } temp.IsChange__c = false; // 有变化才更新 // if(!(temp.Statu_Achievements_DN_details__c == oldMap.get(temp.Id).Statu_Achievements_DN_details__c // && temp.signInForm__c == oldMap.get(temp.Id).signInForm__c // && temp.Asset__c == oldMap.get(temp.Id).Asset__c // && temp.ApplyList_Select__c == oldMap.get(temp.Id).ApplyList_Select__c // && temp.InspectionCard_Select__c == oldMap.get(temp.Id).InspectionCard_Select__c // && temp.IsChange__c == oldMap.get(temp.Id).IsChange__c // )){ // if(!(temp.ApplyList_Select__c == oldMap.get(temp.Id).ApplyList_Select__c // && temp.InspectionCard_Select__c == oldMap.get(temp.Id).InspectionCard_Select__c // && temp.IsChange__c == oldMap.get(temp.Id).IsChange__c // )){ if(!(temp.ApplyList_Select__c == oldMap.get(temp.Id).ApplyList_Select__c && temp.InspectionCard_Select__c == oldMap.get(temp.Id).InspectionCard_Select__c && temp.IsChange__c == oldMap.get(temp.Id).IsChange__c && temp.Asset__c == oldMap.get(temp.Id).Asset__c && temp.ScanDate_Select__c == oldMap.get(temp.Id).ScanDate_Select__c )){ // System.debug('zheli99'); upFnmList.add(temp); } } // System.debug('zhelieupFnmList:'+upFnmList.size()); if(upFnmList.size() > 0){ // update upFnmList; List saveResults = Database.update(upFnmList,false); //总数 totalCount += saveResults.size(); for(Integer i = 0;i 60000) { logStr = logStr.substring(0, 60000); } IfLog.Log__c = logStr; IfLog.Log__c += '\n end'; if (errorStr.length() > 60000) { IfLog.ErrorLog__c = errorStr.substring(0, 60000); } else { IfLog.ErrorLog__c = errorStr.substring(0, errorStr.length()); } insert IfLog; emailMessages.add('失败日志ID为:' + IfLog.Id + '\r\n失败信息:\r\n'+errorStr); //发送邮件 sendFieldEmail(); } // 发送提醒邮件 private void sendFieldEmail() { PretechBatchEmailUtil be = new PretechBatchEmailUtil(); String[] toList = new String[] {UserInfo.getUserEmail()}; String title = '进口单证数据关联更新失败'; String[] ccList = new String[]{}; String ccEmail = System.Label.EmailAlert; if(ccEmail.length() > 0){ for(String email : ccEmail.split(',')){ ccList.add(email); } } if (System.Test.isRunningTest()) { be.successMail('', 1); } if (emailMessages.size() > 0 && failedCount > 0) { be.failedMail(toList, ccList, title, this.emailMessages.get(0)+'\n', totalCount, totalCount - failedCount, failedCount,'',false); if(!Test.isRunningTest()){ be.send(); } } } }