public with sharing class NFM502Controller implements Queueable { public String rowData_id; //add staic sushanhu 20220302 start public static String transUrl; public static String transId; public static String token; public static List sfRecordIds =new List(); //add staic sushanhu 20220302 end public NFM502Controller(String rowData_id) { this.rowData_id = rowData_id; } public static Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt); public void execute(QueueableContext context) { // 通过Rowdata.Id来检索日志中的内容(千里马数据等) BatchIF_Log__c rowData = [Select Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c, Log4__c, Log5__c, Log6__c, Log7__c, Log8__c, Log9__c, Log10__c, Log11__c, Log12__c, MessageGroupNumber__c, retry_cnt__c, NFM501Future_Count__c, NFM501_Web_Annex_Count__c from BatchIF_Log__c where RowDataFlg__c = true and Id = :rowData_id]; //存放报错信息 BatchIF_Log__c iflog502 = new BatchIF_Log__c(); iflog502.Type__c = 'NFM501'; iflog502.RowDataFlg__c = false; iflog502.Log__c = ' '; iflog502.ErrorLog__c = ' '; iflog502.MessageGroupNumber__c = rowData.MessageGroupNumber__c; insert iflog502; NFM502Controller.WebAnnexGain(rowData.Id, iflog502.Id, false); } @future(callout = true) public static void WebAnnexGain(String rowData_id, String iflog502_id, boolean Manual_execution502) { BatchIF_Log__c rowData = [Select Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c, Log4__c, Log5__c, Log6__c, Log7__c, Log8__c, Log9__c, Log10__c, Log11__c, Log12__c, MessageGroupNumber__c, retry_cnt__c, NFM501Future_Count__c, NFM501_Web_Annex_Count__c from BatchIF_Log__c where RowDataFlg__c = true and Id = :rowData_id]; BatchIF_Log__c iflog502 = [Select Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c, Log4__c, Log5__c, Log6__c, Log7__c, Log8__c, Log9__c, Log10__c, Log11__c, Log12__c, MessageGroupNumber__c, retry_cnt__c, NFM501Future_Count__c, NFM501_Web_Annex_Count__c from BatchIF_Log__c where Id = :iflog502_id]; iflog502.Log__c = iflog502.Log__c == null ? '' : iflog502.Log__c; iflog502.ErrorLog__c = iflog502.ErrorLog__c == null ? '' : iflog502.ErrorLog__c; rowData.Log__c = rowData.Log__c == null ? '' : rowData.Log__c; rowData.ErrorLog__c = rowData.ErrorLog__c == null ? '' : rowData.ErrorLog__c; // Savepoint sp = Database.setSavepoint(); try { //update 同staic 20220302 satrt // String token; //update 同staic 20220302 end Datetime oldTime; // 从转换表中获取token BatchIF_Transfer__c token502 = [Select ID, NFM501_Token__c FROM BatchIF_Transfer__c Where Table__c = 'NFM501Token']; token = token502.NFM501_Token__c; // 从转换表中获取获取完token的时间 BatchIF_Transfer__c oldTime502 = [Select ID, NFM501_Gain_End_Time__c FROM BatchIF_Transfer__c Where Table__c = 'NFM501GainEndTime']; oldTime = oldTime502.NFM501_Gain_End_Time__c; // 对日志中的数据进行解析 String WebUrl = NFMUtil.QLMgetRowDataStr(rowData); NFM501Controller.AllData getQLMData502 = (NFM501Controller.AllData) JSON.deserialize(WebUrl, NFM501Controller.AllData.class); if (getQLMData502 == null) { return; } // 判断token是否失效(失效条件为30分钟之后),如果失效,重新获取 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) { // NFMUtil.response response = NFMUtil.receiveToken(); //update to aws token sushanhu 20220301 start NFMUtil.response response = NFMUtil.getAWSToken(); //判断rowdata中数据获取成功与否,如果失败重发三次,如果大于三次则手动操作 if (String.isBlank(response.responseBody)) { System.debug('response.responseBody:' + response.responseBody); iflog502.ErrorLog__c = '502token:' + response.responseBody; // rowData.NFM501_Web_Annex_Count__c = 0; if (!Manual_execution502) { NFM501Controller.againSendRequest(iflog502, 'NFM501_Web_Annex_Count__c', rowData); } //更新日志数据 System.debug('123@@@'); return; } token = response.responseBody; oldTime = Datetime.now(); token502.NFM501_Token__c = token; oldTime502.NFM501_Gain_End_Time__c = oldTime; //update to aws token sushanhu 20220301 end } //关联附件与招投标项目(通过Id) //1.读出招投标中的唯一标识(projecId),将全部招投标projectId存入ProjectIdList List ProjectIdList = new List(); for (NFM501Controller.ListItem ProId : getQLMData502.data.list1) { ProjectIdList.add(ProId.projectId); } System.debug('---===ProjectIdList' + ProjectIdList); //2.取其对应的 List TIList = [Select Id, ProjectId__c, InfoType__c FROM Tender_information__c Where ProjectId__c in :ProjectIdList]; System.debug('---===2345TIList' + TIList); Set TenIdSet = new Set(); Map TenMap = new Map(); for (Tender_information__c Ten : TIList) { TenMap.put(Ten.ProjectId__c, Ten); TenIdSet.add(Ten.Id); } //循环URL // List TenAttList = new List(); //update to aws pi sushanhu 20220301 start List fileList = new List(); List queryUrlList = new List(); Map queryMap = new Map(); //update to aws pi sushanhu 20220301 end for (NFM501Controller.ListItem QLMWebAtt : getQLMData502.data.list1) { if (QLMWebAtt.projectId == null) { iflog502.ErrorLog__c += 'Error! [' + QLMWebAtt.projectId + ']NotExist. This information is skipped.\n'; continue; } if (QLMWebAtt.areaProvince.equals('香港特别行政区') || QLMWebAtt.areaProvince.equals('澳门特别行政区') || QLMWebAtt.areaProvince.equals('台湾省')) { iflog502.ErrorLog__c += 'Error! [' + QLMWebAtt.areaProvince + ']Is 香港特别行政区(澳门特别行政区,台湾省). This information is skipped.\n'; continue; } //update to aws pi sushanhu 20220301 start queryUrlList.add(QLMWebAtt.infoQianlimaUrl); queryMap.put(QLMWebAtt.infoQianlimaUrl,QLMWebAtt); //update to aws pi sushanhu 20220301 start // //调用接口3 // NFMUtil.response response = NFMUtil.getQLMData(NFMUtil.NFM502_ENDPOINT + QLMWebAtt.infoQianlimaUrl, token); // if (String.isBlank(response.responseBody)) { // System.debug('response.responseBody:' + response.responseBody); // iflog502.ErrorLog__c = '502接口调用:' + response.status; // rowData.NFM501_Web_Annex_Count__c = 0; // if (!Manual_execution502) { // NFM501Controller.againSendRequest(iflog502, 'NFM501_Web_Annex_Count__c', rowData); // } // //更新日志数据 // update token502; // update oldTime502; // return; // } // //解析后的code报错处理 // string NFM502responseBody = response.responseBody; // Map Body502 = (Map) JSON.deserializeUntyped(NFM502responseBody); // if (!Body502.get('code').equals('0')) { // System.debug('-------9-------'); // iflog502.ErrorLog__c = '502解析:' + Body502.get('msg').tostring() ; // if (!Manual_execution502) { // NFM501Controller.againSendRequest(iflog502, 'NFM501_Web_Annex_Count__c', rowData); // } // update token502; // update oldTime502; // return; // } // System.debug('Body502.data:' + Body502.get('data').tostring() + '---------' // + Body502.get('msg').tostring() + '-------' + Body502.get('code').tostring()); // //获取网页信息转存为附件 // //截切数据(使数据成为解析的格式) // Integer start = NFM502responseBody.indexOf('"infoHtml":"'); // Integer theEnd = NFM502responseBody.lastIndexOf('"},"msg'); // NFM502responseBody = NFM502responseBody.substring(start + 12, theEnd); // //将其转换为附件 // // System.debug('---------' + NFM502responseBody); // Attachment WebAtt = new Attachment(); // // System.debug('projectId:' + QLMWebAtt.projectId); // if (TenMap.containskey(QLMWebAtt.projectId)) { // WebAtt.ParentId = TenMap.get(QLMWebAtt.projectId).Id; // WebAtt.Body = Blob.valueOf(NFM502responseBody); // WebAtt.Name = TenMap.get(QLMWebAtt.projectId).InfoType__c + ':' + QLMWebAtt.infoTitle + '.html'; // TenAttList.add(WebAtt); // } } //update to aws pi sushanhu 20220301 start PIHelper.piIntegration pi =PIHelper.getPIIntegrationInfo('NFM502'); transUrl=pi.searchUrl; //调用接口3 system.debug('Payload for NFM 520:'+JSON.serialize(queryUrlList)); NFMUtil.response response = NFMUtil.getAWSQLMData(pi.newUrl ,JSON.serialize(queryUrlList), token); Map result = (Map)JSON.deserializeUntyped(response.responseBody); String statusCode =(String)result.get('status'); transId =(String)result.get('txId'); if (!'0'.equals(statusCode)) { System.debug('response.responseBody:' + response.responseBody); iflog502.ErrorLog__c = '502接口调用:' + (String)result.get('message'); rowData.NFM501_Web_Annex_Count__c = 0; if (!Manual_execution502) { NFM501Controller.againSendRequest(iflog502, 'NFM501_Web_Annex_Count__c', rowData); } //更新日志数据 update token502; update oldTime502; return; } //解析后的code报错处理 string NFM502responseBody = response.responseBody; Map Body502 = (Map) JSON.deserializeUntyped(NFM502responseBody); if (!String.valueOf(Body502.get('status')).equals('0')) { System.debug('-------9-------'); iflog502.ErrorLog__c = '502解析:' + Body502.get('message').tostring() ; if (!Manual_execution502) { NFM501Controller.againSendRequest(iflog502, 'NFM501_Web_Annex_Count__c', rowData); } update token502; update oldTime502; return; } System.debug('Body502.data:' + Body502.get('object').tostring() + '---------' + Body502.get('message').tostring() + '-------' + Body502.get('status').tostring()); //获取aws返回的地址并存储 Map fileMap = (Map)result.get('object'); for(String url:queryUrlList){ NFM501Controller.ListItem QLMWebAtt = queryMap.get(url); if (TenMap.containskey(QLMWebAtt.projectId)) { FileAddress__c file =new FileAddress__c(); file.ParentRecordId__c = TenMap.get(QLMWebAtt.projectId).Id; file.FileName__c = TenMap.get(QLMWebAtt.projectId).InfoType__c + ':' + QLMWebAtt.infoTitle + '.html'; file.DownloadLink__c =pi.undeleteUrl+(String)fileMap.get(url)+'&fileName='+file.FileName__c; file.ViewLink__c = pi.queryUrl+(String)fileMap.get(url) ; file.AWS_File_Key__c =(String)fileMap.get(url) ; fileList.add(file); } } //删除同名的附件 List UrlList = new List(); for (NFM501Controller.ListItem UrlName : getQLMData502.data.list1) { if (TenMap.containskey(UrlName.projectId)) { UrlList.add(TenMap.get(UrlName.projectId).InfoType__c + ':' + UrlName.infoTitle + '.html'); } } List DeleFileList = [select id, FileName__c, ParentRecordId__c from FileAddress__c where FileName__c in :UrlList and ParentRecordId__c in :TenIdSet]; if (DeleFileList.size() > 0) { delete DeleFileList; } System.debug('----1----' + fileList); if (fileList.size() > 0) { upsert fileList; } //确认事务 for (FileAddress__c file : fileList) { system.debug('file--'+json.serialize(file)); system.debug('file.id'+file.Id); sfRecordIds.add(file.Id); } //update to aws pi sushanhu 20220301 end // PIHelper.confirmFileTrans('NFM502',1,JSON.serialize(sfRecordIds),transId,token,transUrl); if (fileList.size() > 0) { PIHelper.insertConfirmTrans('NFM502',1,JSON.serialize(sfRecordIds),transId,0,transUrl,null); }else{ PIHelper.insertConfirmTrans('NFM502',0,JSON.serialize(sfRecordIds),transId,0,transUrl,null); } // if (!confirm) { // //回滚 // } rowData.NFM501_Web_Annex_Count__c = 0; } catch (Exception ex) { // Database.rollback(sp); // System.debug(Logginglevel.ERROR, 'QLMData_' + rowData.MessageGroupNumber__c + ':' + ex.getMessage()); // System.debug(Logginglevel.ERROR, 'QLMData_' + rowData.MessageGroupNumber__c + ':' + ex.getStackTraceString()); // logstr += '\n' + ex.getMessage(); //add 事务确认 sushanhu 20220302 satrt // PIHelper.confirmFileTrans('NFM502',0,'',transId,token,transUrl); PIHelper.insertConfirmTrans('NFM502',0,JSON.serialize(sfRecordIds),transId,0,transUrl,null); //add 事务确认 sushanhu 20220302 end iflog502.ErrorLog__c = '502抛出异常:' + ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + iflog502.ErrorLog__c; if (!Manual_execution502) { NFM501Controller.againSendExceptionRequest(iflog502, 'NFM501_Web_Annex_Count__c', rowData, '502抛出异常:' + ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + rowData.ErrorLog__c + '错误次数已经超过自动收信设定的最大次数,请手动收信'); } } update rowData; System.debug('+++++++5+++++++' + rowData); System.debug('+++++++3+++++++' + iflog502.Log__c); System.debug('+++++++2+++++++' + iflog502.ErrorLog__c); //如果存入信息超出限制,用省略号代替 if (iflog502.Log__c.length() > 131072) { iflog502.Log__c = iflog502.Log__c.subString(0, 131065) + ' ...'; } if (iflog502.ErrorLog__c.length() > 32768) { iflog502.ErrorLog__c = iflog502.ErrorLog__c.subString(0, 32760) + ' ...'; } upsert iflog502; } public static 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++; } }