public without sharing class NFM614Controller { private static final String LOG_TYPE = 'NFM614'; // private static final String API = '/admin/api/scd/save'; private static final String API = '/admin/api/repair/save1111111'; public class NFM614 { public GeDatas GeDatas; } public class GeDatas { // public applyRepairInfo[] applyRepairInfo; // public problem[] problem; public NFMUtil.MonitoringToComPlat Monitoring; public GeData[] GeData; } public class GeData { public rentalApplyEquipmentSet[] Rental_Apply_Equipment_Set; public String rentalApplyNo; // 备品单编号 public String repairNo; // 修理单号 public String hospitalCode; // 医院编码 public String hospitalName; // 医院名称 public String strategicDepartmenCode; // 战略科室编码 public String strategicDepartmenName; // 战略科室 public String departmentCode; // 科室编码 public String departmentName; // 科室 public String region; // 大区 public String province; // 省 public String city; // 市 public String rentalApplyStatus; // 备品状态 public String rentalApplyEmpNo; // 申请人编号 public String workPlace; // 申请人办事处 public String queueStatus; // 排队状态 public String demoPurpose1; // 使用目的1 public String demoPurpose2; // 使用目的2 public String productCategory; // 产品分类 public String queueShippmentDate; // 排队备品预计出库时间 public String newExpectedReturnDate; // 最新预定归还日 public String expectedReturnDate; // 预定归还日 public String receivedSignDay; // 用户装机日 public String requestDemoDay; // 申请日期 public String bollowDate; // 备品中心出库日 public String loanerReceivedDay; // 现场签收日 public String assetReturnDay; // 回寄日 public String cancelDate; // 备品申请取消日 public String cannelReason; // 取消理由 public Decimal expectedBorrowingDays; // 希望借用天数 public String selectStatus; // 希望借用天数 public String approvalDate; // 批准日 } public class rentalApplyEquipmentSet { public String equipmentName; public rentalApplyEquipmentSetDetail[] Rental_Apply_Equipment_Set_Detail; //明细 } public class rentalApplyEquipmentSetDetail{ public Decimal queueNo; // 排队编号 public String assetModel; // 设备型号 public String equipmentDetailName; } @future(callout = true) public static void callout(String iflog_Id, List < String > rentalApplyIdList) { List < BatchIF_Log__c > iflog = [Select Id, Name, Log__c, ErrorLog__c from BatchIF_Log__c where Id = :iflog_Id]; String sql = 'Select Id, Name, Log__c, ErrorLog__c from BatchIF_Log__c where Id = \'' + iflog_Id + '\''; // List < BatchIF_Log__c > iflog = DataBase.query(sql); System.debug(iflog + 'NFM614======'); if (iflog == null || iflog.size() == 0) { System.debug(iflog + 'NFM614======null'); executefuture(null, rentalApplyIdList); } else { System.debug(iflog + 'NFM614======null1'); executefuture(iflog.get(0), rentalApplyIdList); } } public static void executefuture(BatchIF_Log__c iflog, List < String > rentalApplyIdList) { Datetime nowDT = Datetime.now(); String nowStr = nowDT.format('yyyyMMddHHmmss'); if (iflog != null) { iflog.ErrorLog__c = ''; } else { iflog = new BatchIF_Log__c(); iflog.Type__c = LOG_TYPE; iflog.ErrorLog__c = ''; iflog.Log__c = 'callout start \n'; iflog.MessageGroupNumber__c = nowStr; } NFMUtil.MonitoringToComPlat me = new NFMUtil.MonitoringToComPlat(); me.Tag = 'MSGH'; me.Sender = 'SFDC'; me.Receiver = '智慧医疗/服务新系统'; me.MessageType = LOG_TYPE; me.MessageGroupNumber = nowStr; if (String.isNotBlank(iflog.Name)) { me.MessageGroupNumber = iflog.Name; } me.TransmissionDateTime = nowStr; me.Text = ''; String randomstr = NFMUtil.randomUUID(16); Long timestamp = DateTime.now().getTime(); String timestampStr = String.valueOf(timestamp); String getToken = NFMUtil.getToken(randomstr, timestamp); me.API_RANDOM_STR = randomstr; me.API_TIME = timestampStr; me.API_TOKEN = getToken; BatchIF_Log__c rowData = null; List raList = new List(); raList = [SELECT Id, Name, Status__c, Repair__r.Name, Hospital__r.Parent_Management_Code__c, Hospital__r.Name, Strategic_dept__r.AccountManageNumber__c, Person_In_Charge__r.Employee_No__c, Strategic_dept__r.Name, Account__r.Management_Code__c, Account__r.Name, User_Salesdept__c, Province__c, HP_City__c, RA_Status__c, WorkPlace__c, Queue_Status__c, Demo_purpose1__c, demo_purpose2__c, Product_category__c, QueueShippmentDate__c, Return_dadeline_final__c, Request_return_day__c, HP_received_sign_day__c, Request_demo_day__c, Bollow_Date__c, Loaner_received_day__c, Asset_return_day2__c, Cancel_date__c, Cancel_Reason__c, Select_Status__c, Request_approval_time__c, Hope_Lonaer_date_Num__c FROM Rental_Apply__c WHERE Id IN :rentalApplyIdList]; String logstr = iflog.Log__c + ' ' + 'NumberOfRecord=' + raList.size() + '\n'; try{ GeDatas geds = new GeDatas(); // geds.applyRepairInfo = new List(); // geds.problem = new List(); List < Id > raIdList = new List < Id > (); // List < Id > raesIdList = new List < Id > (); if (raList.size() > 0) { for (Rental_Apply__c ra: raList) { raIdList.add(ra.Id); } Map < id, List < rentalApplyEquipmentSet >> raesMap = getRaesMap(raIdList); // if (raIdList.size() > 0) { // List raesList = [SELECT Id,Name,Rental_Apply__c FROM Rental_Apply_Equipment_Set__c WHERE Rental_Apply__c IN :raIdList]; // if (raesList.size() > 0) { // for (Rental_Apply_Equipment_Set__c raes : raesList) { // raesIdList.add(raes.Id); // } // if (raesIdList.size() > 0) { // List raesdList = [SELECT Id,Name,Fixture_Model_No__c,Queue_Number__c,Rental_Apply_Equipment_Set__c FROM Rental_Apply_Equipment_Set_Detail__c WHERE Rental_Apply_Equipment_Set__c IN :raesIdList]; // } // } // } List gedList = new List(); rentalApplyEquipmentSet raes = new rentalApplyEquipmentSet(); rentalApplyEquipmentSetDetail raesd = new rentalApplyEquipmentSetDetail(); for (Rental_Apply__c ra : raList) { GeData ged = new GeData(); ged.rentalApplyNo = ra.Name; // 备品单编号 ged.repairNo = ra.Repair__r.Name; // 修理单号 ged.hospitalCode = ra.Hospital__r.Parent_Management_Code__c; // 医院编码 ged.hospitalName = ra.Hospital__r.Name; // 医院名称 ged.strategicDepartmenCode = ra.Strategic_dept__r.AccountManageNumber__c; // 战略科室编码 ged.strategicDepartmenName = ra.Strategic_dept__r.Name; // 战略科室 ged.departmentCode = ra.Account__r.Management_Code__c; // 科室编码 ged.departmentName = ra.Account__r.Name; // 科室 ged.region = ra.User_Salesdept__c; // 大区 ged.province = ra.Province__c; // 省 ged.city = ra.HP_City__c; // 市 ged.rentalApplyStatus = ra.RA_Status__c; // 备品状态 ged.rentalApplyEmpNo = ra.Person_In_Charge__r.Employee_No__c; ged.workPlace = ra.WorkPlace__c; // 申请人办事处 ged.queueStatus = ra.Queue_Status__c; // 排队状态 ged.demoPurpose1 = ra.Demo_purpose1__c; // 使用目的1 ged.demoPurpose2 = ra.demo_purpose2__c; // 使用目的2 ged.productCategory = ra.Product_category__c; // 产品分类 ged.queueShippmentDate = ra.QueueShippmentDate__c == null ? '' : NFMUtil.formatDate2Str(ra.QueueShippmentDate__c) + '000000'; // 排队备品预计出库时间 ged.newExpectedReturnDate = ra.Return_dadeline_final__c == null ? '' : NFMUtil.formatDate2Str(ra.Return_dadeline_final__c) + '000000'; // 最新预定归还日 ged.expectedReturnDate = ra.Request_return_day__c == null ? '' : NFMUtil.formatDate2Str(ra.Request_return_day__c) + '000000'; // 预定归还日 ged.receivedSignDay = ra.HP_received_sign_day__c == null ? '' : NFMUtil.formatDate2Str(ra.HP_received_sign_day__c) + '000000'; // 用户装机日 ged.requestDemoDay = ra.Request_demo_day__c == null ? '' : NFMUtil.formatDate2Str(ra.Request_demo_day__c) + '000000'; // 申请日期 ged.bollowDate = ra.Bollow_Date__c == null ? '' : NFMUtil.formatDate2Str(ra.Bollow_Date__c) + '000000'; // 备品中心出库日 ged.loanerReceivedDay = ra.Loaner_received_day__c == null ? '' : NFMUtil.formatDate2Str(ra.Loaner_received_day__c) + '000000'; // 现场签收日 ged.assetReturnDay = ra.Asset_return_day2__c == null ? '' : NFMUtil.formatDate2Str(ra.Asset_return_day2__c) + '000000'; // 回寄日 ged.cancelDate = ra.Cancel_date__c == null ? '' : NFMUtil.formatDate2Str(ra.Cancel_date__c) + '000000'; // 备品申请取消日 ged.cannelReason = ra.Cancel_Reason__c; // 取消理由 ged.expectedBorrowingDays = ra.Hope_Lonaer_date_Num__c; // 希望借用天数 ged.Rental_Apply_Equipment_Set = raesMap.get(ra.Id); ged.selectStatus = ra.Select_Status__c; ged.approvalDate = ra.Request_approval_time__c == null ? '' : NFMUtil.formatDateTime2Str(ra.Request_approval_time__c); // geds.applyRepairInfo.add(info); // geds.problem.add(pro); System.debug('zyhtest11=====12'+ged); gedList.add(ged); geds.GeData = gedList; // geds.problem = pro; System.debug('zyhtest11=====1'+ged); } System.debug(geds); System.debug('zyhtest====='+geds); System.debug('zyhtest11====='+geds.GeData); logstr+= 'end'; // if (geds.applyRepairInfo.size() > 0 || geds.problem.size() > 0) { if (geds.GeData != null) { geds.Monitoring = me; NFMUtil.Monitoring Monitoring = new NFMUtil.Monitoring(); Monitoring.Tag = geds.Monitoring.Tag; Monitoring.Sender = geds.Monitoring.Sender; Monitoring.Receiver = geds.Monitoring.Receiver; Monitoring.MessageType = geds.Monitoring.MessageType; Monitoring.MessageGroupNumber = geds.Monitoring.MessageGroupNumber; Monitoring.NumberOfRecord = geds.Monitoring.NumberOfRecord; Monitoring.TransmissionDateTime = geds.Monitoring.TransmissionDateTime; Monitoring.Text = ''; NFM614 NFM614 = new NFM614(); NFM614.GeDatas = geds; rowData = NFMUtil.makeRowData(iflog, LOG_TYPE, NFM614); execute(rowData,iflog); } } else { System.debug(Logginglevel.ERROR, LOG_TYPE + iflog.Name + ':' + '没有数据,直接退回'); System.debug(Logginglevel.ERROR, LOG_TYPE + iflog.Name + ':' + '没有数据,直接退回'); logstr += '没有数据,直接退回'; iflog.ErrorLog__c += '没有数据,直接退回' + '\n'; iflog.ErrorLog__c += '没有数据,直接退回' + '\n'; iflog.Log__c = iflog.Log__c + logstr; upsert iflog; } } catch (Exception e) { // 发生错误时 System.debug(Logginglevel.ERROR, LOG_TYPE + iflog.Name + ':' + e.getMessage()); System.debug(Logginglevel.ERROR, LOG_TYPE + iflog.Name + ':' + e.getStackTraceString()); logstr += e.getMessage(); iflog.ErrorLog__c += e.getMessage() + '\n'; iflog.ErrorLog__c += e.getStackTraceString() + '\n'; iflog.Log__c = iflog.Log__c + logstr; upsert iflog; } } /** * 接口发送失败 根据BatchLogId进行手动发送 * @Author XHL * @DateTime 2021-07-22 * @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 XHL * @DateTime 2021-07-22 * @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.Name + ' start\n'; if (iflog == null) { iflog = new BatchIF_Log__c(); iflog.Type__c = LOG_TYPE; iflog.MessageGroupNumber__c = rowDataSFDC.MessageGroupNumber__c; iflog.Log__c = logstr; iflog.ErrorLog__c = ''; } else { iflog.Type__c = LOG_TYPE; iflog.MessageGroupNumber__c = rowDataSFDC.MessageGroupNumber__c; logstr = iflog.Log__c; } try { String data = NFMUtil.getRowDataStr(rowDataSFDC); String status = NFMUtil.sendToAWS612(data, NFMUtil.NFM614_ENDPOINT); System.debug('NFM614Log--status->' + status); if ('OK'.equals(status)) { logstr += status + '\n'; rowDataSFDC.retry_cnt__c = 0; } else { logstr += 'status:' + status + '\n'; if (rowDataSFDC.retry_cnt__c == null) rowDataSFDC.retry_cnt__c = 0; if (rowDataSFDC.retry_cnt__c < batch_retry_max_cnt) { rowDataSFDC.retry_cnt__c++; // LogAutoSendSchedule.logId = rowDataSFDC.Id; LogAutoSendSchedule.assignOneMinute(); } if (rowDataSFDC.retry_cnt__c >= batch_retry_max_cnt) { rowDataSFDC.ErrorLog__c = 'status:' + status + '\n错误次数已经超过自动送信设定的最大次数,请手动送信'; } } } catch (Exception ex) { // TODO IOException // 错误发生时 logstr += ex.getMessage(); iflog.ErrorLog__c += ex.getMessage() + '\n'; iflog.ErrorLog__c += ex.getStackTraceString() + '\n'; if(!Test.isRunningTest()){ // rowDataSFDC = NFMUtil.LogAutoSend(rowDataSFDC, ex, null); //2022-06-24 zyh 注释:重发逻辑修改 //2022-06-24 zyh update start if (rowDataSFDC.retry_cnt__c == null) rowDataSFDC.retry_cnt__c = 0; if (rowDataSFDC.retry_cnt__c < batch_retry_max_cnt){ rowDataSFDC.retry_cnt__c++; // LogAutoSendSchedule.logId = rowDataSFDC.Id; LogAutoSendSchedule.assignOneMinute(); } if (rowDataSFDC.retry_cnt__c >= batch_retry_max_cnt){ rowDataSFDC.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + rowDataSFDC.ErrorLog__c+'错误次数已经超过自动送信设定的最大次数,请手动送信'; } //2022-06-24 zyh update end } } iflog.Log__c = logstr; upsert iflog; upsert rowDataSFDC; } private static Map < id, List < rentalApplyEquipmentSet >> getRaesMap(List < String > raIdList) { List raesList = [SELECT Id,Name,Rental_Apply__c FROM Rental_Apply_Equipment_Set__c WHERE Rental_Apply__c IN :raIdList]; List < Id > raesIdList = new List < Id > (); for (Rental_Apply_Equipment_Set__c raes : raesList) { raesIdList.add(raes.Id); } // if (raesIdList.size() > 0) { Map < id, List < rentalApplyEquipmentSetDetail >> raesdMap = getRaesdMap(raesIdList); // } Map < id, List < rentalApplyEquipmentSet >> raesMap = new Map < id, List < rentalApplyEquipmentSet >> (); if (raesList.size() > 0) { for (Rental_Apply_Equipment_Set__c raes : raesList) { List < rentalApplyEquipmentSet > temp = raesMap.get(raes.Rental_Apply__c); if (temp == null) { temp = new List < rentalApplyEquipmentSet > (); } rentalApplyEquipmentSet raesData = new rentalApplyEquipmentSet(); raesData.equipmentName = raes.Name; raesData.Rental_Apply_Equipment_Set_Detail = raesdMap.get(raes.Id); temp.add(raesData); raesMap.put(raes.Rental_Apply__c, temp); } } return raesMap; } private static Map < id, List < rentalApplyEquipmentSetDetail >> getRaesdMap(List < String > raesIdList) { List raesdList = [SELECT Id,Name,Fixture_Model_No__c,Queue_Number__c,Rental_Apply_Equipment_Set__c FROM Rental_Apply_Equipment_Set_Detail__c WHERE Rental_Apply_Equipment_Set__c IN :raesIdList AND Is_Body__c = TRUE]; Map < id, List < rentalApplyEquipmentSetDetail >> raesdMap = new Map < id, List < rentalApplyEquipmentSetDetail >> (); if (raesdList.size() > 0) { for (Rental_Apply_Equipment_Set_Detail__c raesd : raesdList) { List < rentalApplyEquipmentSetDetail > temp = raesdMap.get(raesd.Rental_Apply_Equipment_Set__c); if (temp == null) { temp = new List < rentalApplyEquipmentSetDetail > (); } rentalApplyEquipmentSetDetail raesdData = new rentalApplyEquipmentSetDetail(); raesdData.assetModel = raesd.Fixture_Model_No__c; raesdData.queueNo = raesd.Queue_Number__c; raesdData.equipmentDetailName = raesd.Name; temp.add(raesdData); raesdMap.put(raesd.Rental_Apply_Equipment_Set__c, temp); } } return raesdMap; } }