global class NFM503InfoFileBatch implements Database.Batchable, Database.AllowsCallouts, Database.Stateful { public String TenId; public String bidInfoFileID; //add staic sushanhu 20220302 start public static String transUrl; public static String transId; public static String token; public static integer isSuccess=0; public static List sfRecordIds =new List(); //add staic sushanhu 20220302 end Boolean IsNeedExecute = false; //2021-06-28 mzy WLIG-BYHD79 SFDC环境batch合并调查 是否符合执行条件 //add nfm 503 aws response start sushanhu 20220301 global class File{ public String key; public String name; } //add nfm 503 aws response sushanhu 20220301 end //2021-06-28 mzy update 千里马-Batch start global NFM503InfoFileBatch() { this.IsNeedExecute = true; } //2021-06-28 mzy update 千里马-Batch end global NFM503InfoFileBatch(String TenId) { this.TenId = TenId; } global NFM503InfoFileBatch(String bidInfoFileID, boolean a) { this.bidInfoFileID = bidInfoFileID; } global Database.QueryLocator start(Database.BatchableContext bc) { String query = 'select Id, Tender_information__c, infoAddress__c, ' + 'Tender_information__r.InfoType__c, isProcessed__c, ' + ' ErrorMessage__c from bidInfoFile__c where isProcessed__c = false '; if (String.isNotBlank(TenId)) { query += 'and Tender_information__r.Id =: TenId'; } if (String.isNotBlank(bidInfoFileID)) { query += 'and Id =: bidInfoFileID'; } return Database.getQueryLocator( query ); } global void execute(Database.BatchableContext BC, list bidInfoFileList) { Savepoint sp; bidInfoFile__c bidInfoFile = bidInfoFileList[0]; List queryfileList = new List(); queryfileList.add(bidInfoFile.infoAddress__c); try { //update 同staic 20220302 satrt // String token; //update 同staic 20220302 end Datetime oldTime; // 从转换表中获取token BatchIF_Transfer__c token503 = [Select ID, NFM501_Token__c FROM BatchIF_Transfer__c Where Table__c = 'NFM501Token']; token = token503.NFM501_Token__c; // 从转换表中获取获取完token的时间 BatchIF_Transfer__c oldTime503 = [Select ID, NFM501_Gain_End_Time__c FROM BatchIF_Transfer__c Where Table__c = 'NFM501GainEndTime']; oldTime = oldTime503.NFM501_Gain_End_Time__c; Long timeslot; Datetime newTime = System.now(); if (oldTime == null) { timeslot = 2800000; } else { // 当前时间与获取token结束时间的时间差 timeslot = newTime.getTime() - oldTime.getTime(); } // System.debug('++++1++++' + token + ' : ' + timeslot); if (string.isblank(token) || timeslot > 1800000) { //UP TO AWAS TOKEN 20220225 SUSHANHU START NFMUtil.response response = NFMUtil.getAWSToken(); //UP TO AWAS TOKEN 20220225 SUSHANHU END if (String.isBlank(response.responseBody)) { bidInfoFile.ErrorMessage__c = '503token:' + response.status; } token = response.responseBody; oldTime = Datetime.now(); token503.NFM501_Token__c = token; oldTime503.NFM501_Gain_End_Time__c = oldTime; } // // 存放超过12M的附件 // List TenOtherAttList = new List(); // // 存放所有附件 // List FileList = new List(); // // 如果文件大小超过12M更新 // List< Tender_information__c> updateTenderList = new List< Tender_information__c>(); // // 获取接口3中数据 // NFMUtil.response503 response = NFMUtil.getFileData(token, bidInfoFile.infoAddress__c); //UP TO NEW AWS method sushanhu start 20220301 // List< Tender_information__c> updateTenderList = new List< Tender_information__c>(); List fileList = new List(); PIHelper.piIntegration pi =PIHelper.getPIIntegrationInfo('NFM503'); transUrl =pi.searchUrl; NFMUtil.response response = NFMUtil.getAWSQLMData(pi.newUrl ,JSON.serialize(queryfileList), token); system.debug('aws result'+response.responseBody); Map result = (Map)JSON.deserializeUntyped(response.responseBody); system.debug('NFM503 aws result--'+response.responseBody+'status'+response.status); transId =(String)result.get('txId'); //UP TO NEW AWS method sushanhu start 20220301 // 新得存储 不需要判断文件超过12m // // 文件大小超过12M // if (response.Name.equals('文件大小超过12M')) { // id tendID = bidInfoFile.Tender_information__c; // Tender_information__c tempTender = new Tender_information__c(); // tempTender.id = tendID; // tempTender.File_Surpass_12M__c = true; // if (String.isBlank(tempTender.Overstep_12M_infofile__c)) { // tempTender.Overstep_12M_infofile__c = bidInfoFile.infoAddress__c; // } else { // if (!tempTender.Overstep_12M_infofile__c.contains(bidInfoFile.infoAddress__c)) { // // List urlList = singleFile.split(','); // tempTender.Overstep_12M_infofile__c += bidInfoFile.infoAddress__c + ','; // } // } // updateTenderList.add(tempTender); // } // // 将获取到的数据存成附件 // Attachment WebAtt = new Attachment(); // WebAtt.ParentId = bidInfoFile.Tender_information__c; // WebAtt.Body = response.responseBody; // WebAtt.Name = bidInfoFile.Tender_information__r.InfoType__c + ':' + response.Name; // if (!response.Name.equals('文件大小超过12M')) { // TenOtherAttList.add(WebAtt); // } // sp = Database.setSavepoint(); // if (updateTenderList.size() > 0) { // update updateTenderList; // } // System.debug('----1----' + TenOtherAttList); // if (TenOtherAttList.size() > 0 ) { // upsert TenOtherAttList; // } // bidInfoFileList[0].isProcessed__c = true; // bidInfoFileList[0].ErrorMessage__c = ''; // update bidInfoFileList; // if (System.Test.isRunningTest()) { // throw new ControllerUtil.myException('aaa'); // } // return; String statusCode =String.valueOf(result.get('status')) ; system.debug('statuscode aws-- '+statusCode); if (!'0'.equals(statusCode)) { System.debug('response.responseBody:' + response.responseBody); return; } Map fileMap = (Map)result.get('object'); system.debug('fileMap'+fileMap.toString()); Map fileVO =(Map)fileMap.get(bidInfoFile.infoAddress__c); String Name =(String)fileVO.get('name'); // if (Name.equals('文件大小超过12M')) { // id tendID = bidInfoFile.Tender_information__c; // Tender_information__c tempTender = new Tender_information__c(); // tempTender.id = tendID; // tempTender.File_Surpass_12M__c = true; // if (String.isBlank(tempTender.Overstep_12M_infofile__c)) { // tempTender.Overstep_12M_infofile__c = bidInfoFile.infoAddress__c; // } else { // if (!tempTender.Overstep_12M_infofile__c.contains(bidInfoFile.infoAddress__c)) { // // List urlList = singleFile.split(','); // tempTender.Overstep_12M_infofile__c += bidInfoFile.infoAddress__c + ','; // } // } // updateTenderList.add(tempTender); // } //将获取的AWS文件地址存储 FileAddress__c file = new FileAddress__c(); file.ParentRecordId__c = bidInfoFile.Tender_information__c; file.FileName__c = bidInfoFile.Tender_information__r.InfoType__c + ':' + Name; file.DownloadLink__c =pi.undeleteUrl+(String)fileVO.get('key')+'&fileName='+file.FileName__c; file.ViewLink__c = pi.queryUrl+(String)fileVO.get('key'); file.AWS_File_Key__c =(String)fileVO.get('key'); fileList.add(file); sp = Database.setSavepoint(); System.debug('----1----' + fileList); if (fileList.size() > 0 ) { upsert fileList; } bidInfoFileList[0].isProcessed__c = true; bidInfoFileList[0].ErrorMessage__c = ''; update bidInfoFileList; // add 确认事务 sushanhu 20220302 start if (fileList.size() > 0 ) { for (FileAddress__c fileAddress : fileList) { system.debug('fileAddress.Id---'+json.serialize(fileAddress)); sfRecordIds.add(fileAddress.Id); system.debug('fileAddress.Id---'+fileAddress.Id); } } system.debug('成功的token'+token); isSuccess =1; // if (!confirm) { // //回滚 // if (sp != null) { // Database.rollback(sp); // } // } // add 确认事务 sushanhu 20220302 end if (System.Test.isRunningTest()) { throw new ControllerUtil.myException('aaa'); } return; } catch (Exception ex) { if (sp != null) { Database.rollback(sp); } // //add 确认事务 20220302 sushanhu start // system.debug('失败的token'+token); // PIHelper.confirmFileTrans('NFM503',0,'',transId,token,transUrl); //add 确认事务 20220302 sushanhu end bidInfoFile.ErrorMessage__c = '503抛出异常:' + ex.getMessage() + '\n' + ex.getStackTraceString(); system.debug('ErrorMessage'+bidInfoFile.ErrorMessage__c); } update bidInfoFile; } global void finish(Database.BatchableContext BC) { // add confirm transaction for pipl sushanhu 20220314 start if (isSuccess==0) { PIHelper.confirmFileTrans('NFM503',isSuccess,'',transId,token,transUrl); }else { PIHelper.confirmFileTrans('NFM503',isSuccess,JSON.serialize(sfRecordIds),transId,token,transUrl); } // add confirm transaction for pipl sushanhu 20220314 end } }