public with sharing class NFM622Controller { public class Actives_element { public NFMUtil.MonitoringToOnline Monitoring; public Active_element[] GeData; } public class Active_element { public String Num; public String Name; public String Status; public String StartDate; public String EndDate; } /** * NFM622の送信処理 * * @param iflog_Id //日志表的ID * @param actIds //发送目标活动 */ @future (callout=true) public static void callout(String iflog_Id, List actIds) { if (actIds == null || actIds.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; } System.debug('iflogList---->'+iflogList); //数据的查询 List itemList = [select id, Num__c, Name2__c, Status, StartDate, EndDate from Campaign where id IN:actIds]; //Monitoring的设定 String logstr = null; for(Campaign item : itemList){ logstr = iflog.Log__c + '\nNumberOfRecord=' + actIds.size() + '\n学会编码:' + item.Num__c; } Datetime nowDT = Datetime.now(); String nowStr = nowDT.format('yyyyMMddHHmm'); Actives_element actives = new Actives_element(); actives.Monitoring = new NFMUtil.MonitoringToOnline(); actives.Monitoring.TransmissionDateTime = nowStr; actives.Monitoring.Text = ''; actives.Monitoring.Tag = 'MSGH'; actives.Monitoring.Sender = 'SFDC'; actives.Monitoring.Receiver = '智慧医疗'; actives.Monitoring.NumberOfRecord = '' + itemList.size(); actives.Monitoring.MessageType = 'NFM622'; actives.Monitoring.MessageGroupNumber = iflog.Name; actives.Monitoring.username = 'SFDC'; actives.Monitoring.password = 'sfdcsendtoonline'; BatchIF_Log__c rowData = null; //数据的设定 try { actives.GeData = new List(); for(Campaign cam : itemList){ Active_element active = new Active_element(); actives.GeData.add(active); active.Num = cam.Num__c; active.Name = cam.Name2__c; active.Status = cam.Status; active.StartDate = NFMUtil.formatDate2Str(cam.StartDate); active.EndDate = NFMUtil.formatDate2Str(cam.EndDate); } System.debug('actives.GeData.size--->'+actives.GeData.size()); if (actives.GeData.size() > 0) { NFMUtil.Monitoring Monitoring = new NFMUtil.Monitoring(); Monitoring.Tag = actives.Monitoring.Tag; Monitoring.Sender = actives.Monitoring.Sender; Monitoring.Receiver = actives.Monitoring.Receiver; Monitoring.MessageType = actives.Monitoring.MessageType; Monitoring.MessageGroupNumber = actives.Monitoring.MessageGroupNumber; Monitoring.NumberOfRecord = actives.Monitoring.NumberOfRecord; Monitoring.TransmissionDateTime = actives.Monitoring.TransmissionDateTime; Monitoring.Text = ''; rowData = NFMUtil.makeRowData(Monitoring, 'NFM622', actives); execute(rowData, iflog); } logstr += '\n end'; //测试类可以进catch if (System.Test.isRunningTest()) { throw new ControllerUtil.myException('aaa'); } } catch(Exception ex) { //发生错误的情况 System.debug(Logginglevel.ERROR, 'NFM622_' + iflog.Name + ':' + ex.getMessage()); System.debug(Logginglevel.ERROR, 'NFM622_' + iflog.Name + ':' + ex.getStackTraceString()); logstr += ex.getMessage(); iflog.ErrorLog__c += ex.getMessage() + '\n'; iflog.ErrorLog__c += ex.getStackTraceString() + '\n'; } System.debug('rowData--->'+rowData); if (rowData != null) { upsert rowData; } System.debug(Logginglevel.DEBUG, 'NFM622_' + iflog.Name + ' end'); 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); Actives_element actives = (Actives_element) JSON.deserialize(rowDataStr, Actives_element.class); String logstr = actives.Monitoring.MessageGroupNumber + ' start\n'; System.debug('rowData1:'+ rowData); System.debug('iflog1:' + iflog); Boolean needUpdateIflog = false; if (iflog == null) { needUpdateIflog = true; iflog = new BatchIF_Log__c(); iflog.Type__c = 'NFM622'; iflog.MessageGroupNumber__c = actives.Monitoring.MessageGroupNumber; iflog.Log__c = logstr; iflog.ErrorLog__c = ''; } else { iflog.MessageGroupNumber__c = iflog.Name; logstr = iflog.Log__c; } try{ // 向智慧医疗发送接口 String status = NFMUtil.sendToComPlat(rowDataStr, NFMUtil.NFM622_ENDPOINT); if ('OK'.equals(status)) { logstr += '\n'+status; rowData.retry_cnt__c = 0; } } catch (Exception ex) { //发生错误的情况 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; System.debug('logdate2' + rowData); if (needUpdateIflog) { upsert iflog; System.debug('iflog------>'+iflog); upsert rowData; } } }