public with sharing class NFM115Controller { public static String status; public class Samples { public NFMUtil.Monitoring Monitoring; public Sample[] Sample; } //样本订货单 public class Sample { public String AgentCode; public String DeliveryAddress; public String DeliveryContact; public String DeliveryPhone; public String AreaCode; public Detail[] Detail; } //样本订货单明细 public class Detail { public String ItemCode; public String ItemQuantity; } /** * NFM115の送信処理 * * @param iflog_Id //日志表的ID * @param samIds //发送样本订货单 */ @future (callout=true) public static void callout(String iflog_Id, List samIds) { if (samIds == null || samIds.size() == 0) { return; } //MessageGroupNumber的获取 List iflogList = [Select Id, Name, Log__c, ErrorLog__c from BatchIF_Log__c where Id = :iflog_Id]; BatchIF_Log__c iflog = null; if (iflogList.size() > 0) { iflog = iflogList.get(0); iflog.ErrorLog__c = ''; } else { //没有取得数据,就是被rollback了 return; } //Monitoring的设定 String logstr = iflog.Log__c + '\nNumberOfRecord=' + samIds.size(); Datetime nowDT = Datetime.now(); String nowStr = nowDT.format('yyyyMMddHHmm'); Samples samples = new Samples(); samples.Monitoring = new NFMUtil.Monitoring(); samples.Monitoring.TransmissionDateTime = nowStr; samples.Monitoring.Text = ''; samples.Monitoring.Tag = 'MSGH'; samples.Monitoring.Sender = 'SFDC'; samples.Monitoring.Receiver = 'SAP'; samples.Monitoring.NumberOfRecord = '' + samIds.size(); samples.Monitoring.MessageType = 'NFM115'; samples.Monitoring.MessageGroupNumber = iflog.Name; BatchIF_Log__c rowData = null; try { List samList = [select Id, AgentCode__c, DeliveryAddress__c, DeliveryContact__c, DeliveryPhone__c, Account__c, Account__r.City_Master__r.Level2_Sys_No__c from Sample_order_list__c where Id IN:samIds]; List samDetailList = [select id, ItemCode__c, ItemQuantity__c, Sample_order_list__c from Sample_order_list_detail__c where Sample_order_list__c IN:samIds]; samples.Sample = new List(); for(Sample_order_list__c sam : samList){ Sample sample = new Sample(); sample.AgentCode = sam.AgentCode__c; sample.DeliveryAddress = sam.DeliveryAddress__c; sample.DeliveryContact = sam.DeliveryContact__c; sample.DeliveryPhone = sam.DeliveryPhone__c; sample.AreaCode = sam.Account__r.City_Master__r.Level2_Sys_No__c; sample.Detail = new List(); samples.Sample.add(sample); for(Sample_order_list_detail__c samDetail : samDetailList){ if(samDetail.Sample_order_list__c == sam.Id){ Detail Detail = new Detail(); Detail.ItemCode = samDetail.ItemCode__c; Detail.ItemQuantity = String.valueOf(samDetail.ItemQuantity__c); sample.Detail.add(Detail); } } } if(samples.Sample.size() > 0){ NFMUtil.Monitoring Monitoring = new NFMUtil.Monitoring(); Monitoring.Tag = samples.Monitoring.Tag; Monitoring.Sender = samples.Monitoring.Sender; Monitoring.Receiver = samples.Monitoring.Receiver; Monitoring.MessageType = samples.Monitoring.MessageType; Monitoring.MessageGroupNumber = samples.Monitoring.MessageGroupNumber; Monitoring.NumberOfRecord = samples.Monitoring.NumberOfRecord; Monitoring.TransmissionDateTime = samples.Monitoring.TransmissionDateTime; Monitoring.Text = ''; rowData = NFMUtil.makeRowData(Monitoring, 'NFM115', samples); execute(rowData, iflog); } logstr += '\nend'; } catch(Exception ex) { //发生错误的情况 System.debug(Logginglevel.ERROR, 'NFM115_' + iflog.Name + ':' + ex.getMessage()); System.debug(Logginglevel.ERROR, 'NFM115_' + 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); Samples samples = (Samples) JSON.deserialize(rowDataStr, Samples.class); String logstr = samples.Monitoring.MessageGroupNumber + ' start\n'; Boolean needUpdateIflog = false; if (iflog == null) { needUpdateIflog = true; iflog = new BatchIF_Log__c(); iflog.Type__c = 'NFM115'; iflog.MessageGroupNumber__c = samples.Monitoring.MessageGroupNumber; iflog.Log__c = logstr; iflog.ErrorLog__c = ''; } else { iflog.MessageGroupNumber__c = samples.Monitoring.MessageGroupNumber; logstr = iflog.Log__c; } try{ //发送接口 status = NFMUtil.sendToSapRet(rowDataStr, NFMUtil.NFM115_ENDPOINT); System.debug('NFM115Log--status->' + status); if ('Accepted'.equals(status)) { logstr += status + '\n'; rowData.retry_cnt__c = 0; } else { rowData = NFMUtil.LogAutoSend(rowData, null, status); } } catch (Exception ex) { //发生错误的情况 System.debug(Logginglevel.ERROR, 'NFM115_' + iflog.Name + ':' + ex.getMessage()); System.debug(Logginglevel.ERROR, 'NFM115_' + 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; } } }