From e4185f503d973b28f95725908e3fad155cfbf088 Mon Sep 17 00:00:00 2001 From: 沙世明 <shashiming@prec-tech.com> Date: 星期三, 22 三月 2023 11:55:32 +0800 Subject: [PATCH] 进口单证发货日逻辑 --- force-app/main/default/classes/SetFrameNumManageBatch.cls | 276 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 222 insertions(+), 54 deletions(-) diff --git a/force-app/main/default/classes/SetFrameNumManageBatch.cls b/force-app/main/default/classes/SetFrameNumManageBatch.cls index 4125e8a..5950b1e 100644 --- a/force-app/main/default/classes/SetFrameNumManageBatch.cls +++ b/force-app/main/default/classes/SetFrameNumManageBatch.cls @@ -2,27 +2,57 @@ * [SetFrameNumManageBatch 杩涘彛鍗曡瘉涓婁紶鍚庢煡鎵惧瓧娈礲atch鏇存柊] * @Author lijinhuan * @DateTime 2022-11-04T18:31:03+0800 - * @return [] + * 娴嬭瘯绫伙細FrameNumUploadControllerTest */ -global without sharing class SetFrameNumManageBatch implements Database.Batchable<sObject> { +global without sharing class SetFrameNumManageBatch implements Database.Batchable<sObject>, Database.Stateful{ public String query; + public String Id; + + //閭欢淇℃伅 + List<String> emailMessages = new List<String>(); + + //鎶ラ敊鐨勮繘鍙e崟璇両d + 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,SerialNumberS__c,InspectionCard__c,ApplyList__c from FrameNumManage__c where '; - // query += '('; - query += ' signInForm__c = null '; - query += ' OR Statu_Achievements_DN_details__c = null '; - query += ' OR Asset__c = null '; - query += ' OR (InspectionCard_Select__c = null AND InspectionCard__c != null AND InspectionCard__c !=\'涓嶅嚭璇乗')'; - query += ' OR (InspectionCard_Select__c != null AND (InspectionCard__c =\'涓嶅嚭璇乗' OR InspectionCard__c = null))';// 娓呯┖ - query += ' OR (ApplyList_Select__c = null AND ApplyList__c != null)'; - query += ' OR (ApplyList_Select__c != null AND ApplyList__c = null)';// 娓呯┖ - // query += ')'; - // query += ' AND id = \'a5D9D0000000WqF\''; + 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); } @@ -31,48 +61,82 @@ Map<String,String> ApplyListMap = new Map<String,String>(); Map<String,Id> InspectionCardIdMap = new Map<String,Id>(); Map<String,Id> ApplyListIdMap = new Map<String,Id>(); - Set<String> SerialNumberSet = new Set<String>(); - Set<Id> clearSet = new Set<Id>(); + Set<String> TracingCodeSet = new Set<String>(); + Set<String> TracingCodeAssetSet = new Set<String>(); + Map<Id,String> clearMap = new Map<Id,String>(); + Set<Date> ScanDateSet = new Set<Date>(); + Map<Id,FrameNumManage__c> oldMap = new Map<Id,FrameNumManage__c>(); + try{ for(FrameNumManage__c fnm:fnmList){ // 娓呯┖ - if(String.isBlank(fnm.ApplyList__c) - || String.isBlank(fnm.InspectionCard__c) - ||(!String.isBlank(fnm.InspectionCard__c) && fnm.InspectionCard__c == '涓嶅嚭璇�')){ - clearSet.add(fnm.Id); - }else{ - //璧嬪�� - SerialNumberSet.add(fnm.SerialNumberS__c); - InspectionCardMap.put(fnm.SerialNumberS__c,fnm.InspectionCard__c); - ApplyListMap.put(fnm.SerialNumberS__c,fnm.ApplyList__c); + // 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<String,Id> DNdetailMap = new Map<String,Id>(); - Map<String,String> DNMap = new Map<String,String>(); - for(Statu_Achievements_DN_details__c dn:[SELECT Id,SerialNumber__c,Statu_Achievements_DN__c,Statu_Achievements_DN__r.Name FROM Statu_Achievements_DN_details__c WHERE SerialNumber__c IN: SerialNumberSet]){ - DNdetailMap.put(dn.SerialNumber__c,dn.Id); - DNMap.put(dn.SerialNumber__c,dn.Statu_Achievements_DN__r.Name); - } - // 绛炬敹鍗� - Map<String,Id> eSignFormMap = new Map<String,Id>(); - 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); - } - } - } + // Map<String,Id> DNdetailMap = new Map<String,Id>(); + // Map<String,String> DNMap = new Map<String,String>(); + // Map<String,Id> AssetMap = new Map<String,Id>(); + // 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<String,Id> eSignFormMap = new Map<String,Id>(); + // 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<String,Id> AssetMap = new Map<String,Id>(); - for(Asset ass:[SELECT Id,SerialNumber FROM Asset WHERE SerialNumber IN: SerialNumberSet]){ - AssetMap.put(ass.SerialNumber,ass.Id); + Map<String, Asset> AssetDatas = new Map<String, Asset>(); + // 杩涘彛鍗曡瘉 澧炲姞鍙戣揣鏃ヨ缃� 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<String> FilesNameSet = new Set<String>(); FilesNameSet.addAll(InspectionCardMap.values()); FilesNameSet.addAll(ApplyListMap.values()); - // 鍟嗘璇� InspectionCard_Select__c 鎶ュ叧鍗� ApplyList_Select__c - for(FileAddress__c fa:[SELECT Id,OnlyFileName__c FROM FileAddress__c WHERE OnlyFileName__c IN: FilesNameSet]){ + 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); @@ -82,31 +146,135 @@ } } } + // 鎵弿鏃ユ湡 + Map<Date,Id> ScanDateMap = new Map<Date,Id>(); + for(OlympusCalendar__c oc:[SELECT Id,Date__c FROM OlympusCalendar__c WHERE Date__c IN: ScanDateSet]){ + ScanDateMap.put(oc.Date__c,oc.Id); + } // 鏈�鍚庢暣鍚� List<FrameNumManage__c> upFnmList = new List<FrameNumManage__c>(); for(FrameNumManage__c fnm:fnmList){ FrameNumManage__c temp = new FrameNumManage__c(); temp.Id = fnm.Id; - if(clearSet.contains(fnm.Id)){ - temp.InspectionCard_Select__c = null; - temp.ApplyList_Select__c = null; - }else{ - temp.Statu_Achievements_DN_details__c = DNdetailMap.get(fnm.SerialNumberS__c); - temp.signInForm__c = eSignFormMap.get(fnm.SerialNumberS__c); - temp.Asset__c = AssetMap.get(fnm.SerialNumberS__c); - temp.InspectionCard_Select__c = InspectionCardIdMap.get(fnm.SerialNumberS__c); - temp.ApplyList_Select__c = ApplyListIdMap.get(fnm.SerialNumberS__c); + // 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 } - upFnmList.add(temp); + 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; + // update upFnmList; + List<Database.SaveResult> saveResults = Database.update(upFnmList,false); + //鎬绘暟 + totalCount += saveResults.size(); + for(Integer i = 0;i<saveResults.size();i++) { + if(!saveResults.get(i).isSuccess() ){ + logStr += upFnmList.get(i).id +' ,'; + errorStr += '澶辫触杩涘彛鍗曡瘉 :'+upFnmList.get(i).id+' 澶辫触鍘熷洜:'+ String.ValueOf(saveResults.get(i).getErrors()[0]).split(';')[2].split('=')[1] + +' : '+String.ValueOf(saveResults.get(i).getErrors()[0]).split(';')[1].split('=')[1] + '\r\n'; + failedCount++ ; + } + } + } + + }catch(Exception ex){ + errorStr += 'Batch鎵ц杩囩▼涓嚭鐜伴敊璇�: ' + ex.getStackTraceString(); } } global void finish(Database.BatchableContext BC) { + BatchIF_Log__c IfLog = new BatchIF_Log__c(); + IfLog.Type__c = 'SetFrameNumManageBatchErrorLog'; + if (logStr.length() > 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(); + } + } } } \ No newline at end of file -- Gitblit v1.9.1