@RestResource(urlMapping='/NFM012/*')
|
global with sharing class NFM012Rest {
|
|
global class DepositRest {
|
public Deposit Deposit;
|
}
|
|
global class Deposit {
|
public NFMUtil.Monitoring Monitoring;
|
public NFM012Rest.GeneralData[] GeneralData;
|
}
|
|
global class GeneralData {
|
public String EndUserNo; // DealerNumber
|
public String UpdateDate; // 更新日期
|
public Decimal DepositAmount; // 结余金额
|
}
|
@HttpPost
|
global static void execute() {
|
|
// 取得接口传输内容
|
String strData = RestContext.request.requestBody.toString();
|
|
DepositRest drs = (DepositRest) JSON.deserializeStrict(strData, DepositRest.class);
|
|
if (drs == null ) {
|
return;
|
}
|
NFMUtil.Monitoring Monitoring = drs.Deposit.Monitoring;
|
if (Monitoring == null) {
|
return;
|
}
|
BatchIF_Log__c rowData = NFMUtil.saveRowData(Monitoring, 'NFM012', drs.Deposit.GeneralData);
|
if (String.isBlank(rowData.Log__c) == false){
|
executefuture(rowData.Id);
|
}
|
|
// JSONを戻す
|
RestResponse res = RestContext.response;
|
res.addHeader('Content-Type', 'application/json');
|
res.statusCode = 200;
|
//String jsonResponse = '{"status": "Success", "Message":' + gedata + '}';
|
String jsonResponse = '{"status": "Success", "Message":""}';
|
res.responseBody = blob.valueOf(jsonResponse);
|
return;
|
}
|
@future
|
global static void executefuture(String rowData_Id) {
|
main(rowData_Id);
|
}
|
global static void main(String rowData_Id) {
|
Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt);
|
BatchIF_Log__c rowData = [Select Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c, Log4__c, Log5__c, Log6__c, Log7__c, Log8__c, Log9__c, Log10__c, Log11__c, Log12__c, MessageGroupNumber__c,retry_cnt__c from BatchIF_Log__c where RowDataFlg__c = true and Id = :rowData_Id];
|
String logstr = rowData.MessageGroupNumber__c + ' start\n';
|
BatchIF_Log__c iflog = new BatchIF_Log__c();
|
iflog.Type__c = 'NFM012';
|
iflog.MessageGroupNumber__c = rowData.MessageGroupNumber__c;
|
iflog.Log__c = logstr;
|
iflog.ErrorLog__c = '';
|
insert iflog;
|
|
String rowDataStr = NFMUtil.getRowDataStr(rowData);
|
List<GeneralData> generalDataList = (List<GeneralData>) JSON.deserialize(rowDataStr, List<GeneralData>.class);
|
if (generalDataList == null || generalDataList.size() == 0) {
|
return;
|
}
|
|
Savepoint sp = Database.setSavepoint();
|
try {
|
// 更新対応配列をセット
|
List<Account> accList = new List<Account>();
|
Map<String, Account> accUpdateMap = new Map<String, Account>();
|
for (GeneralData GeneralData : generalDataList) {
|
if (GeneralData.EndUserNo == null || GeneralData.EndUserNo == '') {
|
// 必須項目がない場合、処理と飛ばす
|
iflog.ErrorLog__c += 'EndUserNo is required\n';
|
continue;
|
}
|
|
// 項目転送のセット
|
Account acc = new Account();
|
acc.AgentCode_Ext__c = GeneralData.EndUserNo;
|
if (accUpdateMap.get(acc.AgentCode_Ext__c) == null) {
|
accList.add(acc);
|
accUpdateMap.put(acc.AgentCode_Ext__c, acc);
|
logstr += GeneralData.EndUserNo + ' ';
|
} else {
|
acc = accUpdateMap.get(acc.AgentCode_Ext__c);
|
}
|
acc.Deposit_Receipt_Completion_Day__c = NFMUtil.parseStr2Date(GeneralData.UpdateDate);
|
acc.Deposit_Receipt_Finished__c = GeneralData.DepositAmount;
|
}
|
if (accList.size() > 0) {
|
Database.UpsertResult[] srList = Database.upsert(accList, Account.Fields.AgentCode_Ext__c, false);
|
// Iterate through each returned result
|
for (Integer i = 0; i < srList.size(); i++) {
|
Account acc = accList[i];
|
Database.UpsertResult sr = srList[i];
|
if (sr.isSuccess()) {
|
// Operation was successful, so get the ID of the record that was processed
|
System.debug('Successfully inserted account. Account ID: ' + sr.getId());
|
}
|
else {
|
// Operation failed, so get all errors
|
for(Database.Error err : sr.getErrors()) {
|
//System.debug(err.getStatusCode() + ': ' + err.getMessage());
|
iflog.ErrorLog__c += acc.AgentCode_Ext__c + ', ' + err.getStatusCode() + ': ' + err.getMessage() + '\n';
|
}
|
}
|
}
|
}
|
logstr += '\nend';
|
rowData.retry_cnt__c=0;
|
} catch(Exception ex) {
|
// エラーが発生した場合
|
Database.rollback(sp);
|
System.debug(Logginglevel.ERROR, 'NFM012_' + rowData.MessageGroupNumber__c + ':' + ex.getMessage());
|
System.debug(Logginglevel.ERROR, 'NFM012_' + rowData.MessageGroupNumber__c + ':' + ex.getStackTraceString());
|
logstr += '\n' + ex.getMessage();
|
iflog.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + iflog.ErrorLog__c;
|
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+'错误次数已经超过自动收信设定的最大次数,请手动收信';
|
}
|
}
|
update rowData;
|
iflog.Log__c = logstr;
|
if (iflog.Log__c.length() > 131072) {
|
iflog.Log__c = iflog.Log__c.subString(0, 131065) + ' ...';
|
}
|
if (iflog.ErrorLog__c.length() > 32768) {
|
iflog.ErrorLog__c = iflog.ErrorLog__c.subString(0, 32760) + ' ...';
|
}
|
update iflog;
|
}
|
}
|