public without sharing class NFM605Controller { private static final String LOG_TYPE = 'NFM605'; private static final String API = '/admin/api/scd/save'; //服务合同数据推送接口 public class ContractInfo { public String contractCd; //合同编码 public String hospitalCd; //医院编码 public String strategicDepartmenCd; //战略科室编码 public String departmentCd; //科室编码 public String contractStartDate; //合同起始日期 public String contractEndDate; //合同结束日期 public String contractEquipQty; //合同设备量 public String reportSeason; //报告季度 public String reportSeasonStartDate; //报告季度开始时间 public String reportSeasonEndDate; //报告季度结束时间 public String reportSendTime; //报告发放时间 public Decimal CurDistributionTimes; //目前应发放次数 public Decimal ActDistributionTimes; //实际发放次数 } //正常调用 @future(callout = true) public static void callout(String iflog_Id, List < Id > reportIdList) { executeNotFuture(iflog_Id, reportIdList); } //Batch调用 public static void executeNotFuture(String iflog_Id, List < Id > reportIdList) { BatchIF_Log__c iflog = new BatchIF_Log__c(); Datetime nowDT = Datetime.now(); String nowStr = nowDT.format('yyyyMMddHHmmss'); if (String.isNotBlank(iflog_Id)) { iflog = [Select Id, Name, Log__c, ErrorLog__c from BatchIF_Log__c where Id = : iflog_Id]; if (iflog == null) { iflog = new BatchIF_Log__c(); } } iflog.Type__c = LOG_TYPE; iflog.ErrorLog__c = ''; iflog.Log__c = 'callout start\n'; iflog.MessageGroupNumber__c = nowStr; List < ContractInfo > contrs = new List < ContractInfo > (); BatchIF_Log__c rowData = null; List < NewMaintenanceReport_Task__c > nmtreportList = [select id, NewMaintenance_Contract__r.Maintenance_Contract_No__c, NewMaintenance_Contract__r.Hospital__r.Management_Code__c, NewMaintenance_Contract__r.Department_Class__r.Management_Code__c, NewMaintenance_Contract__r.Department_Class__r.Management_Code_Auto__c, NewMaintenance_Contract__r.Department__r.Management_Code__c, NewMaintenance_Contract__r.Contract_Start_Date__c, NewMaintenance_Contract__r.Contract_End_Date__c, NewMaintenance_Contract__r.New_equipment_quantity1__c, NewMaintenance_Contract__r.Estimate_Asset_Cnt__c, Distribution_Quarter__c, Distribution_Start_Date__c, Distribution_End_Date__c, CorrespondingPeriod__c, NewMaintenance_Contract__r.NumberOfPlan_Today__c, NewMaintenance_Contract__r.ActualFrequency_Formula__c from NewMaintenanceReport_Task__c where id in : reportIdList ]; String logstr = iflog.Log__c + ' ' + 'NumberOfRecord=' + nmtreportList.size() + '\n'; try { for (NewMaintenanceReport_Task__c n: nmtreportList) { ContractInfo cont = new ContractInfo(); cont.contractCd = n.NewMaintenance_Contract__r.Maintenance_Contract_No__c; //合同编码 cont.hospitalCd = n.NewMaintenance_Contract__r.Hospital__r.Management_Code__c; //医院编码 cont.strategicDepartmenCd = n.NewMaintenance_Contract__r.Department_Class__r.Management_Code__c; //战略科室编码 cont.departmentCd = n.NewMaintenance_Contract__r.Department__r.Management_Code__c; //科室编码 cont.contractStartDate = NFMUtil.formatDate2StrDateTime(n.NewMaintenance_Contract__r.Contract_Start_Date__c); //合同起始日期 cont.contractEndDate = NFMUtil.formatDate2StrDateTime(n.NewMaintenance_Contract__r.Contract_End_Date__c); //合同结束日期 cont.contractEquipQty = n.NewMaintenance_Contract__r.Estimate_Asset_Cnt__c + ''; //合同设备量 cont.reportSeason = n.Distribution_Quarter__c; //报告季度 cont.reportSeasonStartDate = NFMUtil.formatDate2StrDateTime(n.Distribution_Start_Date__c); //报告季度开始时间 cont.reportSeasonEndDate = NFMUtil.formatDate2StrDateTime(n.Distribution_End_Date__c); //报告季度结束时间 cont.reportSendTime = NFMUtil.formatDate2StrDateTime(n.CorrespondingPeriod__c); //报告发放时间 cont.CurDistributionTimes = n.NewMaintenance_Contract__r.NumberOfPlan_Today__c; //目前应发放次数 cont.ActDistributionTimes = n.NewMaintenance_Contract__r.ActualFrequency_Formula__c; //实际发放次数 contrs.add(cont); } logstr += '\nend'; if (contrs.size() > 0) { //生成BatchLog日志,记录发送情况 rowData = NFMUtil.makeRowData(iflog, LOG_TYPE, contrs); rowData.MessageGroupNumber__c = nowStr; //insert rowData; execute(rowData, iflog); } if(Test.isRunningTest()){ Integer num = Integer.valueOf('TestError'); } } catch (Exception ex) { System.debug(LoggingLevel.ERROR, 'NFM_SA_SERVICECONTRACTDATE' + iflog.Name + ':' + ex.getMessage()); System.debug(LoggingLevel.ERROR, 'NFM_SA_SERVICECONTRACTDATE' + iflog.Name + ':' + ex.getStackTraceString()); logstr += ex.getMessage(); iflog.ErrorLog__c += ex.getMessage() + '\n'; iflog.ErrorLog__c += ex.getStackTraceString() + '\n'; } if (rowData != null) { upsert rowData; } iflog.Log__c += logstr; upsert iflog; } /** * 接口发送失败 根据BatchLogId进行手动发送 * @Author * @DateTime * @param rowDataId [BatchLogId] */ public static void ManualExecute(String rowDataId) { List < BatchIF_Log__c > row = [select id, name, MessageGroupNumber__c, retry_cnt__c, RowDataFlg__c, ErrorLog__c, Type__c, Log__c, Log2__c, Log3__c, Log4__c, Log5__c, Log6__c, Log7__c, Log8__c, Log9__c, Log10__c, Log11__c, Log12__c from BatchIF_Log__c where id = : rowDataId ]; if (row.size() > 0) execute(row[0], null); } /** * 逻辑正常执行发送 * @Author * @DateTime * @param rowDataSFDC [BatchLogId] * @param iflog [执行情况记录] */ public static void execute(BatchIF_Log__c rowDataSFDC, BatchIF_Log__c iflog) { Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt); String logstr = rowDataSFDC.MessageGroupNumber__c + ' start\n'; if (iflog == null) { iflog = new BatchIF_Log__c(); } else { logstr += iflog.Log__c; } iflog.Type__c = LOG_TYPE; iflog.MessageGroupNumber__c = rowDataSFDC.MessageGroupNumber__c; iflog.ErrorLog__c = ''; try { String data = NFMUtil.getRowDataStr(rowDataSFDC); String status = NFMUtil.sendToAWS(data, API); System.debug('NFM605Log--status->'+ status); if ('OK'.equals(status)) { logstr += status + '\n'; rowDataSFDC.retry_cnt__c = 0; } else { rowDataSFDC = NFMUtil.LogAutoSend(rowDataSFDC, null, status); } } catch (Exception ex) { // TODO IOException iflog.ErrorLog__c += ex.getMessage() + '\n'; iflog.ErrorLog__c += ex.getStackTraceString() + '\n'; rowDataSFDC = NFMUtil.LogAutoSend(rowDataSFDC, ex, null); } upsert rowDataSFDC; iflog.Log__c += logstr; upsert iflog; } }