public with sharing class NFM116Controller { public static String status; public class OnlineSigns { public NFMUtil.Monitoring Monitoring; public OnlineSign[] OnlineSign; } public class OnlineSign { public String SoNo; public String DeliveryNote; public String DealerResult; public String DealerDate; public String HospitalResult; public String HospitalDate; } /** * NFM116の送信処理 * * @param iflog_Id //日志表的ID * @param OnlineSignIdList //要发送的签收单的ID */ @future (callout=true) public static void callout(String iflog_Id, List OnlineSignIdList) { executeNotFuture(iflog_Id, OnlineSignIdList); } public static void executeNotFuture(String iflog_Id, List OnlineSignIdList) { if (OnlineSignIdList == null || OnlineSignIdList.size() == 0) { return; } //MessageGroupNumber的获取 Datetime nowDT = Datetime.now(); String nowStr = nowDT.format('yyyyMMddHHmm'); BatchIF_Log__c iflog = new BatchIF_Log__c(); if(String.isNotBlank(iflog_Id)){ iflog = [Select Id, Name, Log__c, ErrorLog__c, MessageGroupNumber__c from BatchIF_Log__c where Id = :iflog_Id]; } else{ iflog.MessageGroupNumber__c = nowStr; } iflog.Log__c = 'callout start\n'; iflog.Type__c = 'NFM116'; iflog.ErrorLog__c = ''; String logstr = iflog.Log__c + '\nNumberOfRecord=' + OnlineSignIdList.size(); //Monitoring的设定 OnlineSigns onlineSigns = new OnlineSigns(); onlineSigns.Monitoring = new NFMUtil.Monitoring(); onlineSigns.Monitoring.TransmissionDateTime = nowStr; onlineSigns.Monitoring.Text = ''; onlineSigns.Monitoring.Tag = 'MSGH'; onlineSigns.Monitoring.Sender = 'SFDC'; onlineSigns.Monitoring.Receiver = 'SAP'; onlineSigns.Monitoring.NumberOfRecord = '' + OnlineSignIdList.size(); onlineSigns.Monitoring.MessageType = 'NFM116'; onlineSigns.Monitoring.MessageGroupNumber = iflog.Name; BatchIF_Log__c rowData = new BatchIF_Log__c(); try { List eSignFormList = [select Id, SANumber__c, DNName__c, agencyAcceptSAPResult__c, HPAcceptSAPResult__c, agencyAccOrSAPConfirmDate__c, hpAccOrSAPConfirmDate__c from eSignForm__c where Id IN :OnlineSignIdList]; System.debug('eSignFormList1:' + eSignFormList); onlineSigns.OnlineSign = new List(); for(eSignForm__c eSignForm : eSignFormList){ OnlineSign onlineSign = new OnlineSign(); onlineSign.SoNo = eSignForm.SANumber__c; onlineSign.DeliveryNote = eSignForm.DNName__c; onlineSign.DealerResult = eSignForm.agencyAcceptSAPResult__c; onlineSign.DealerDate = NFMUtil.formatDate2Str(eSignForm.agencyAccOrSAPConfirmDate__c); onlineSign.HospitalResult = eSignForm.HPAcceptSAPResult__c; onlineSign.HospitalDate = NFMUtil.formatDate2Str(eSignForm.hpAccOrSAPConfirmDate__c); onlineSigns.OnlineSign.add(onlineSign); } if(onlineSigns.OnlineSign.size() > 0){ NFMUtil.Monitoring Monitoring = new NFMUtil.Monitoring(); Monitoring.Tag = onlineSigns.Monitoring.Tag; Monitoring.Sender = onlineSigns.Monitoring.Sender; Monitoring.Receiver = onlineSigns.Monitoring.Receiver; Monitoring.MessageType = onlineSigns.Monitoring.MessageType; Monitoring.MessageGroupNumber = onlineSigns.Monitoring.MessageGroupNumber; Monitoring.NumberOfRecord = onlineSigns.Monitoring.NumberOfRecord; Monitoring.TransmissionDateTime = onlineSigns.Monitoring.TransmissionDateTime; Monitoring.Text = ''; rowData = NFMUtil.makeRowData(Monitoring, 'NFM116', onlineSigns); execute(rowData, iflog); } logstr += '\nend'; } catch(Exception ex) { System.debug(Logginglevel.ERROR, 'NFM116_' + iflog.Name + ':' + ex.getMessage()); System.debug(Logginglevel.ERROR, 'NFM116_' + iflog.Name + ':' + ex.getStackTraceString()); logstr += ex.getMessage(); iflog.ErrorLog__c += ex.getMessage() + '\n'; iflog.ErrorLog__c += ex.getStackTraceString() + '\n'; } System.debug('thhrowData--->'+rowData); if (rowData != null) { upsert rowData; } iflog.Log__c = logstr; upsert iflog; } public static void execute(BatchIF_Log__c rowData, BatchIF_Log__c iflog) { Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt); String rowDataStr = NFMUtil.getRowDataStr(rowData); OnlineSigns onlineSigns = (OnlineSigns) JSON.deserialize(rowDataStr, OnlineSigns.class); String logstr = onlineSigns.Monitoring.MessageGroupNumber + ' start\n'; Boolean needUpdateIflog = false; if (iflog == null) { needUpdateIflog = true; iflog = new BatchIF_Log__c(); iflog.Log__c = logstr; iflog.ErrorLog__c = ''; } else { logstr = iflog.Log__c; } iflog.Type__c = 'NFM116'; iflog.MessageGroupNumber__c = onlineSigns.Monitoring.MessageGroupNumber; try{ //发送接口 status = NFMUtil.sendToSapRet(rowDataStr, NFMUtil.NFM116_ENDPOINT); System.debug('NFM116Log--status->' + status); if ('Accepted'.equals(status)) { logstr += 'status:' + status + '\n'; rowData.retry_cnt__c = 0; } } catch (Exception ex) { System.debug(Logginglevel.ERROR, 'NFM116_' + iflog.Name + ':' + ex.getMessage()); System.debug(Logginglevel.ERROR, 'NFM116_' + iflog.Name + ':' + ex.getStackTraceString()); logstr += ex.getMessage(); iflog.ErrorLog__c += ex.getMessage() + '\n'; iflog.ErrorLog__c += ex.getStackTraceString() + '\n'; if (rowData.retry_cnt__c == null) rowData.retry_cnt__c = 0; if (rowData.retry_cnt__c < batch_retry_max_cnt) { rowData.retry_cnt__c++; LogAutoSendSchedule.assignOneMinute(); } if (rowData.retry_cnt__c >= batch_retry_max_cnt) { rowData.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + rowData.ErrorLog__c+'错误次数已经超过自动送信设定的最大次数,请手动送信'; } } iflog.Log__c = logstr; if (needUpdateIflog) { upsert iflog; upsert rowData; } } }