public without sharing class NFM612Controller {
|
|
private static final String LOG_TYPE = 'NFM612S';
|
// private static final String API = '/admin/api/scd/save';
|
private static final String API = '/admin/api/repair/save1111111';
|
public class NFM612 {
|
public Gedatas Gedatas;
|
}
|
public class Gedatas {
|
public applyRepairInfo[] applyRepairInfo;
|
public problem[] problem;
|
}
|
public class applyRepairInfo {
|
public String ReportRepairNo;
|
public String ReportRepairNo2;
|
}
|
public class problem {
|
public String dateReceiptQuestions; //投诉知悉日(Complaint Aware Date)
|
public String ifDeadHurt; //是否有死亡、伤害、感染
|
public String problemOccurred; //问题发生时间情况
|
public String problemOccurredSelect; //问题发生时间情况 其他
|
public String reportAdverseEvents; //医院有没有向政府机关报告不良事件或疑似不良事件
|
public String whatProject; //做的是哪个项目
|
public String operationOrExaminationName; //手术/检查名称
|
public String breakORFallOff; //是否有发生断裂或脱落
|
public String useFailProductFinish; //是否用该产品完成了手术/检查
|
public String supportingProducts; //配套使用产品
|
public String afterFailureInformation; //发现故障后,医院对患者的处理情况
|
public String delay15Min; //发现故障现象后,有延误15分钟以上的手术实施的情况发生吗
|
public String informationFrom; //信息是从医院的谁那里得到的
|
public String failureQInHospital; //在医院,故障发生的频率是多少
|
public String delayReportReason; //超时报告的理由
|
public String isProductFaultRelated; //是否与这次产品故障相关
|
}
|
@future(callout = true)
|
public static void callout(String iflog_Id, List < String > repairOrderIdList) {
|
//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 > iflogs = DataBase.query(sql);
|
if (iflogs == null || iflogs.size() == 0) {
|
executefuture(null, repairOrderIdList);
|
} else {
|
executefuture(iflogs.get(0), repairOrderIdList);
|
}
|
|
}
|
|
public static void executefuture(BatchIF_Log__c iflog, List < String > repairOrderIdList) {
|
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;
|
}
|
BatchIF_Log__c rowData = null;
|
List<RepairSubOrder__c> repSoList = new List<RepairSubOrder__c>();
|
repSoList = [SELECT Id,
|
Name,
|
RepairOrderNo__c,
|
DateReceiptQuestions__c,
|
IfDeadHurt__c,
|
ProblemOccurred__c,
|
ProblemOccurredSelect__c,
|
ReportAdverseEvents__c,
|
WhatProject__c,
|
OperationOrExaminationName__c,
|
BreakORFallOff__c,
|
UseFailProductFinish__c,
|
SupportingProducts__c,
|
AfterFailureInformation__c,
|
Delay15Min__c,
|
InformationFrom__c,
|
FailureQInHospital__c,
|
DelayReportReason__c,
|
IsProductFaultRelated__c
|
FROM RepairSubOrder__c WHERE Id IN :repairOrderIdList];
|
String logstr = iflog.Log__c + ' ' + 'NumberOfRecord=' + repSoList.size() + '\n';
|
try{
|
Gedatas geds = new Gedatas();
|
geds.applyRepairInfo = new List<applyRepairInfo>();
|
geds.problem = new List<problem>();
|
List < Id > repSoIdList = new List < Id > ();
|
for (RepairSubOrder__c repSo: repSoList) {
|
repSoIdList.add(repSo.Id);
|
}
|
for (RepairSubOrder__c repSo : repSoList) {
|
applyRepairInfo info = new applyRepairInfo();
|
problem pro = new problem();
|
info.ReportRepairNo = repSo.RepairOrderNo__c;
|
info.ReportRepairNo2 = repSo.Name;
|
pro.dateReceiptQuestions = repSo.DateReceiptQuestions__c;
|
pro.ifDeadHurt = repSo.IfDeadHurt__c;
|
pro.problemOccurred = repSo.ProblemOccurred__c;
|
pro.problemOccurredSelect = repSo.ProblemOccurredSelect__c;
|
pro.reportAdverseEvents = repSo.ReportAdverseEvents__c;
|
pro.whatProject = repSo.WhatProject__c;
|
pro.operationOrExaminationName = repSo.OperationOrExaminationName__c;
|
pro.breakORFallOff = repSo.BreakORFallOff__c;
|
pro.useFailProductFinish = repSo.UseFailProductFinish__c;
|
pro.supportingProducts = repSo.SupportingProducts__c;
|
pro.afterFailureInformation = repSo.AfterFailureInformation__c;
|
pro.delay15Min = repSo.Delay15Min__c;
|
pro.informationFrom = repSo.InformationFrom__c;
|
pro.failureQInHospital = repSo.FailureQInHospital__c;
|
pro.delayReportReason = repSo.DelayReportReason__c;
|
pro.isProductFaultRelated = repSo.IsProductFaultRelated__c;
|
geds.applyRepairInfo.add(info);
|
geds.problem.add(pro);
|
|
}
|
System.debug(geds);
|
logstr+= 'end';
|
if (geds.applyRepairInfo.size() > 0 || geds.problem.size() > 0) {
|
NFM612 nfm612 = new NFM612();
|
nfm612.Gedatas = geds;
|
rowData = NFMUtil.makeRowData(iflog, LOG_TYPE, nfm612);
|
execute(rowData,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.sendToAWS(data, API);
|
System.debug('NFM612SLog--status->' + status);
|
|
if ('OK'.equals(status)) {
|
logstr += status + '\n';
|
rowDataSFDC.retry_cnt__c = 0;
|
} else {
|
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;
|
}
|
}
|