/**串联问题*/ public with sharing class NFM504Controller { public class Tender_element { public NFMUtil.Monitoring Monitoring;//请求头 public Tenders_element[] GeData;//要发送的数据 } public class Tenders_element { public String oldProjectId;//要删除招投标的项目Id public String oldInfoId;// 要删除招投标的信息Id public String newProjectId;// 要保留招投标的项目Id } public String DTenId; public NFM504Controller(String DTenId) { this.DTenId = DTenId; } public NFM504Controller() { } @future (callout = true) public static void sendRequest(String DTenId) { Tender_information__c BTenInfo; // 删除的招投标 Tender_information__c DTenInfo = [Select Id, InfoId__c, ProjectId__c, CursorMark__c, Retain_Tender__c From Tender_information__c Where Id = : DTenId]; if (String.isNotBlank(DTenInfo.Retain_Tender__c)) { // 保留的招投标 BTenInfo = [Select Id, InfoId__c, ProjectId__c, Retain_Tender__c From Tender_information__c Where Id = : DTenInfo.Retain_Tender__c]; } // Monitoringの設定 Datetime nowDT = Datetime.now(); String nowStr = nowDT.format('yyyyMMddHHmm'); Tender_element tenders = new Tender_element(); tenders.Monitoring = new NFMUtil.Monitoring(); tenders.Monitoring.Tag = 'MSGH'; tenders.Monitoring.Sender = 'SFDC'; tenders.Monitoring.Receiver = 'SPO'; tenders.Monitoring.MessageType = 'NFM504'; tenders.Monitoring.MessageGroupNumber = DTenInfo.CursorMark__c; tenders.Monitoring.NumberOfRecord = '2'; tenders.Monitoring.TransmissionDateTime = nowStr; tenders.Monitoring.Text = ''; BatchIF_Log__c rowData = null; //存放报错信息 BatchIF_Log__c iflog504 = new BatchIF_Log__c(); iflog504.Type__c = 'NFM501'; iflog504.RowDataFlg__c = false; iflog504.Log__c = ' '; iflog504.ErrorLog__c = ' '; iflog504.MessageGroupNumber__c = DTenInfo.CursorMark__c; // insert iflog504; try { String token; Datetime oldTime; // 从转换表中获取token BatchIF_Transfer__c token504 = [Select ID, NFM501_Token__c FROM BatchIF_Transfer__c Where Table__c = 'NFM501Token']; token = token504.NFM501_Token__c; // 从转换表中获取获取完token的时间 BatchIF_Transfer__c oldTime504 = [Select ID, NFM501_Gain_End_Time__c FROM BatchIF_Transfer__c Where Table__c = 'NFM501GainEndTime']; oldTime = oldTime504.NFM501_Gain_End_Time__c; // 判断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) { System.debug('---------1----------'); NFMUtil.response response = NFMUtil.receiveToken(); //判断rowdata中数据获取成功与否,如果失败重发三次,如果大于三次则手动操作 if (String.isBlank(response.responseBody)) { // System.debug('response.responseBody:' + response.responseBody); iflog504.ErrorLog__c = '504token:' + response.status; // 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(); System.debug('---------7----------' + token); token504.NFM501_Token__c = token; oldTime504.NFM501_Gain_End_Time__c = oldTime; } tenders.GeData = new List(); Tenders_element tender = new Tenders_element(); tenders.GeData.add(tender); if (String.isNotBlank(DTenInfo.Retain_Tender__c)) { tender.newProjectId = BTenInfo.ProjectId__c; } tender.oldInfoId = DTenInfo.InfoId__c; tender.oldProjectId = DTenInfo.ProjectId__c; if (tenders.GeData.size() > 0) { NFMUtil.Monitoring Monitoring = new NFMUtil.Monitoring(); Monitoring.Tag = tenders.Monitoring.Tag; Monitoring.Sender = tenders.Monitoring.Sender; Monitoring.Receiver = tenders.Monitoring.Receiver; Monitoring.MessageType = tenders.Monitoring.MessageType; Monitoring.MessageGroupNumber = tenders.Monitoring.MessageGroupNumber; Monitoring.NumberOfRecord = tenders.Monitoring.NumberOfRecord; Monitoring.TransmissionDateTime = tenders.Monitoring.TransmissionDateTime; Monitoring.Text = ''; rowData = NFMUtil.makeRowData(Monitoring, 'NFM501', tenders); System.debug('---------2----------' + rowData); execute(rowData, iflog504, token); } } catch (Exception ex) { iflog504.ErrorLog__c += ex.getMessage() + '\n'; iflog504.ErrorLog__c += ex.getStackTraceString() + '\n'; } if (rowData != null) { upsert rowData; } System.debug('---------6----------' + rowData); upsert iflog504; System.debug('---------3----------' + iflog504); } public static void execute(BatchIF_Log__c rowData, BatchIF_Log__c iflog504, String token) { Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt); String rowDataStr = 'text=' + NFMUtil.getRowDataStr(rowData); System.debug('---------4----------' + rowDataStr); try { // 向SPO送信 NFMUtil.sendTenInfo(token, rowDataStr, NFMUtil.NFM504_ENDPOINT); rowData.retry_cnt__c = 0; } catch (Exception ex) { iflog504.ErrorLog__c += ex.getMessage() + '\n'; iflog504.ErrorLog__c += ex.getStackTraceString() + '\n'; NFM501Controller.againSendExceptionRequest(iflog504, 'retry_cnt__c', rowData, '504抛出异常:' + ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + rowData.ErrorLog__c + '错误次数已经超过自动收信设定的最大次数,请手动收信'); } upsert iflog504; System.debug('---------5----------' + iflog504); upsert rowData; } }