@RestResource(urlMapping = '/SBGITM/*')
|
global with sharing class SBGITMRest {
|
|
//
|
//该接口20200320下班之后正式废弃,特此标注,改用新接口-SBGITMRestNew
|
//
|
//
|
|
global class GeDatasRest {
|
public GeDatas GeDatas;
|
}
|
|
global class GeDatas {
|
public NFMUtil.Monitoring Monitoring;
|
public SBGITMRest.GeData[] GeData;
|
}
|
global class GeData {
|
public String ProductCode;
|
public String ProductDescription;
|
public String ProductStatus;
|
public String EffectiveDateTo;
|
public String Other1;
|
public String Other2;
|
public String Other3;
|
|
//20190717 SSBG_CBPR
|
public String Exemption;//豁免标识
|
public String IsRadiant;//辐射标识
|
public String NMPAStatus;//首营物料状态
|
public String StatusEffectiveDateFrom;//有效期开始日
|
//20190717 SSBG_CBPR
|
public String ZCHG_STATUS;
|
}
|
|
@HttpPost
|
global static void execute() {
|
|
// 取得接口传输内容
|
String strData = RestContext.request.requestBody.toString();
|
GeDatasRest ges = (GeDatasRest) JSON.deserializeStrict(strData, GeDatasRest.class);
|
|
if (ges == null ) {
|
return;
|
}
|
|
NFMUtil.Monitoring Monitoring = ges.GeDatas.Monitoring;
|
if (Monitoring == null) {
|
return;
|
}
|
|
BatchIF_Log__c rowData = NFMUtil.saveRowData(Monitoring, 'SBGITM', ges.GeDatas.GeData);
|
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 = 'SBGITM';
|
//iflog.MessageGroupNumber__c = rowData.MessageGroupNumber__c;
|
//iflog.Log__c = logstr;
|
//iflog.ErrorLog__c = '';
|
//insert iflog;
|
//String rowDataStr = NFMUtil.getRowDataStr(rowData);
|
//List<GeData> itemMasterList = (List<GeData>) JSON.deserialize(rowDataStr, List<GeData>.class);
|
//if (itemMasterList == null || itemMasterList.size() == 0) {
|
// return;
|
//}
|
|
//Savepoint sp = Database.setSavepoint();
|
//try {
|
// // 更新対応配列とMapなどをセット
|
// List<String> productCodeList = new List<String>();
|
// for (GeData GeData : itemMasterList) {
|
// if (GeData.ProductCode == null || GeData.ProductCode == '') {
|
// // 必須項目がない場合、処理と飛ばす
|
// continue;
|
// }
|
// productCodeList.add(GeData.ProductCode);
|
// }
|
// List<Product2> prdList = [select Id,
|
// ProductCode,
|
// Description,
|
// ProductStatus__c,
|
// EffectiveDateTo__c,
|
// NMPAStatus_one__c, MaterialStatus_one_Start__c, MaterialStatus_one_End__c,
|
// NMPAStatus_two__c, MaterialStatus_two_Start__c, MaterialStatus_two_End__c
|
// from Product2
|
// where ProductModels__c = false and ProductCode in :productCodeList];
|
// Map<String, Product2> prdsMap = new Map<String, Product2>();
|
// for (Product2 prd : prdList) {
|
// prdsMap.put(prd.ProductCode, prd);
|
// }
|
|
// // 更新対応配列をセット
|
// prdList = new List<Product2>();
|
// Map<String, Product2> prdUpdateMap = new Map<String, Product2>();
|
// for (GeData GeData : itemMasterList) {
|
// if (GeData.ProductCode == null || GeData.ProductCode == '') {
|
// // 必須項目がない場合、処理と飛ばす
|
// iflog.ErrorLog__c += 'MaterialNumber is required\n';
|
// continue;
|
// }
|
|
// if (String.isBlank(GeData.ProductDescription)) {
|
// iflog.ErrorLog__c += 'Description is required:' + GeData.ProductCode + ' \n';
|
// continue;
|
// }
|
|
// Product2 prd = prdsMap.get(GeData.ProductCode);
|
// String prdName = null;
|
|
// if (prd == null) {
|
// prd = new Product2();
|
// }
|
|
// // 項目転送のセット
|
// prd.ProductCode = GeData.ProductCode;
|
// prd.IsActive = true;
|
// if (prdUpdateMap.get(prd.ProductCode) == null) {
|
// prdList.add(prd);
|
// prdUpdateMap.put(prd.ProductCode, prd);
|
// //logstr += GeData.MaterialNumber + ' '; // 価格表のところまとめてlogを出す
|
// } else {
|
// prd = prdUpdateMap.get(prd.ProductCode);
|
// }
|
|
|
// //SSBG-CBPR
|
// // 中文名称が転送してきた場合
|
// prdName = GeData.ProductDescription;
|
// if (prdName != null) {
|
|
// //SSBG-CBPR
|
// Date dateFrom = '00000000'.equals(GeData.StatusEffectiveDateFrom) ? Date.today() : NFMUtil.parseStr2Date(GeData.StatusEffectiveDateFrom, false);
|
// Date oneStart = prd.MaterialStatus_one_Start__c;
|
// Date oneEnd = prd.MaterialStatus_one_End__c;
|
// Date twoStart = prd.MaterialStatus_two_Start__c;
|
// Date twoEnd = prd.MaterialStatus_two_End__c ;
|
|
// String campState = String.isBlank( GeData.NMPAStatus) ? 'Z1' : GeData.NMPAStatus;
|
// if (prd == null) {
|
|
// prd.NMPAStatus_one__c = campState;
|
// prd.MaterialStatus_one_Start__c = dateFrom;
|
// prd.MaterialStatus_one_End__c = NFMUtil.parseStr2Date('40001231', true);
|
// } else if ( oneStart == null || oneEnd < Date.today() || oneStart == dateFrom) {
|
|
// if (twoEnd != null) {
|
// prd.MaterialStatus_two_End__c = dateFrom.addDays(-1);
|
// }
|
// prd.NMPAStatus_one__c = campState;
|
// prd.MaterialStatus_one_Start__c = dateFrom;
|
// prd.MaterialStatus_one_End__c = NFMUtil.parseStr2Date('40001231', true);
|
// } else if (twoStart == null || twoEnd < Date.today() || twoStart == dateFrom) {
|
|
// prd.NMPAStatus_two__c = campState;
|
// prd.MaterialStatus_one_End__c = dateFrom.addDays(-1);
|
// prd.MaterialStatus_two_Start__c = dateFrom;
|
// prd.MaterialStatus_two_End__c = NFMUtil.parseStr2Date('40001231', true);
|
// } else {
|
|
// if ( (oneStart <= Date.today()) && (Date.today() <= oneEnd)) {
|
// prd.MaterialStatus_one_End__c = dateFrom.addDays(-1);
|
// prd.NMPAStatus_two__c = campState;
|
// prd.MaterialStatus_two_Start__c = dateFrom;
|
// prd.MaterialStatus_two_End__c = NFMUtil.parseStr2Date('40001231', true);
|
// } else if ( (twoStart <= Date.today()) && (Date.today() <= twoEnd)) {
|
// prd.MaterialStatus_two_End__c = dateFrom.addDays(-1);
|
// prd.NMPAStatus_one__c = campState;
|
// prd.MaterialStatus_one_Start__c = dateFrom;
|
// prd.MaterialStatus_one_End__c = NFMUtil.parseStr2Date('40001231', true);
|
// }
|
// }
|
|
|
// prd.If_Exempt_Product__c = GeData.Exemption == '1' ? true : false;
|
// prd.If_Radiation_Product__c = GeData.IsRadiant == '1' ? true : false;
|
|
// //SSBG-CBPR
|
|
|
// // デフォルト値
|
// prd.Name = prdName;
|
// String alternative_Products = null;
|
// String nDM_Model_No = null;
|
// prd.Name = prdName.trim();
|
|
// // 型番:代替品::中文名称 のパターン
|
// //Pattern pt = Pattern.compile('(.*):(.*)::(.*)');
|
// //Matcher mc = pt.matcher(prdName);
|
// //if (mc.matches() == false
|
// // && ((prd.Name.indexOf(':') >= 0 && prd.Name.indexOf(':') != prd.Name.indexOf('::'))
|
// // || (prd.Name.indexOf(':') >= 0 && prd.Name.indexOf(':') != prd.Name.indexOf('::'))
|
// // )
|
// //) {
|
// // // 型番::中文名称 のパターン
|
// // pt = Pattern.compile('(.*):(.*)');
|
// // mc = pt.matcher(prdName);
|
// // if (mc.matches()) {
|
// // nDM_Model_No = mc.group(1).trim();
|
// // prd.Name = mc.group(2).trim();
|
// // prd.Product_ECCode__c = nDM_Model_No;
|
// // System.debug('mc is1' + mc);
|
// // System.debug('prdName is1' + prdName);
|
// // System.debug('nDM_Model_No is1' + nDM_Model_No);
|
// // } else {
|
// // pt = Pattern.compile('(.*):(.*)');
|
// // mc = pt.matcher(prdName);
|
// // if (mc.matches()) {
|
// // nDM_Model_No = mc.group(1).trim();
|
// // prd.Name = mc.group(2).trim();
|
// // prd.Product_ECCode__c = nDM_Model_No;
|
// // System.debug('mc is2' + mc);
|
// // System.debug('prdName is2' + prdName);
|
// // System.debug('nDM_Model_No is2' + nDM_Model_No);
|
// // }
|
// // }
|
// //}
|
|
// if (prdName.indexOf(':') < 0 && prdName.indexOf(':') < 0) {
|
// prd.Product_ECCode__c = GeData.ProductCode;
|
// } else {
|
// Integer max = -1;
|
// Integer min = 100000;
|
// Integer starh = prdName.indexOf(':');
|
// if (starh >= 0) {
|
// if (min > starh) {
|
// min = starh;
|
// }
|
// }
|
// Integer stara = prdName.indexOf(':');
|
// if (stara >= 0) {
|
// if (min > stara) {
|
// min = stara;
|
// }
|
// }
|
// Integer endh = prdName.lastIndexOf(':');
|
// if (endh >= 0) {
|
// if (max < endh) {
|
// max = endh;
|
// }
|
// }
|
// Integer enda = prdName.lastIndexOf(':');
|
// if (enda >= 0) {
|
// if (max < enda) {
|
// max = enda;
|
// }
|
// }
|
// prd.Product_ECCode__c = prdName.substring(0, min);
|
// prd.Name = prdName.substring(max + 1, prdName.length());
|
// }
|
// if (GeData.ProductCode != null) {
|
// prd.ProductCode = GeData.ProductCode;
|
// }
|
// if (GeData.ProductDescription != null) {
|
// prd.Description = GeData.ProductDescription;
|
// }
|
// if (GeData.ProductStatus != null) {
|
// prd.ProductStatus__c = GeData.ProductStatus;
|
// }
|
// if (GeData.EffectiveDateTo != null) {
|
// prd.EffectiveDateTo__c = NFMUtil.parseStr2Date(GeData.EffectiveDateTo, true);
|
// }
|
|
|
// //SSBG-CBPR
|
// }
|
// }
|
// if (prdList.size() > 0) {
|
// logstr += 'Execute Record:' + prdList.size() + '\n';
|
// upsert prdList;
|
// // PricebookEntryにデータがない場合insertする、CNYとUSDのみ
|
// Pricebook2 pricebook = ControllerUtil.getStandardPricebook();
|
|
// String pricebookId = pricebook.Id;
|
// List<PricebookEntry> pbeList = [Select Product2Id, CurrencyIsoCode, UnitPrice, Pricebook2Id From PricebookEntry where Product2Id in: prdList and Pricebook2Id = :pricebookId order by Product2Id, CurrencyIsoCode];
|
// List<PricebookEntry> pbeInsertList = new List<PricebookEntry>();
|
// Map<String, PricebookEntry> rmbMap = new Map<String, PricebookEntry>();
|
// Map<String, PricebookEntry> usdMap = new Map<String, PricebookEntry>();
|
// for (PricebookEntry pbe : pbeList) {
|
// if (pbe.CurrencyIsoCode == 'CNY') {
|
// rmbMap.put(pbe.Product2Id, pbe);
|
// } else if (pbe.CurrencyIsoCode == 'USD') {
|
// usdMap.put(pbe.Product2Id, pbe);
|
// }
|
// }
|
// for (Product2 prd : prdList) {
|
// logstr += prd.ProductCode;
|
// if (rmbMap.get(prd.Id) == null) {
|
// PricebookEntry pbe = new PricebookEntry();
|
// pbe.Pricebook2Id = pricebookId;
|
// pbe.Product2Id = prd.Id;
|
// pbe.CurrencyIsoCode = 'CNY';
|
// pbe.UnitPrice = 0;
|
// pbe.IsActive = prd.IsActive;
|
// pbeInsertList.add(pbe);
|
// logstr += ' add(CNY_0)';
|
// }
|
// if (usdMap.get(prd.Id) == null) {
|
// PricebookEntry pbe = new PricebookEntry();
|
// pbe.Pricebook2Id = pricebookId;
|
// pbe.Product2Id = prd.Id;
|
// pbe.CurrencyIsoCode = 'USD';
|
// pbe.UnitPrice = 0;
|
// pbe.IsActive = prd.IsActive;
|
// pbeInsertList.add(pbe);
|
// logstr += ' add(USD_0)';
|
// }
|
// logstr += ' ';
|
// }
|
// if (pbeInsertList.size() > 0) {
|
// logstr += 'Execute Record2:' + pbeInsertList.size() + '\n';
|
// insert pbeInsertList;
|
// }
|
// }
|
// logstr += '\nend';
|
// rowData.retry_cnt__c = 0;
|
//} catch (Exception ex) {
|
// // エラーが発生した場合
|
// Database.rollback(sp);
|
// System.debug(Logginglevel.ERROR, 'SBGITM_' + rowData.MessageGroupNumber__c + ':' + ex.getMessage());
|
// System.debug(Logginglevel.ERROR, 'SBGITM_' + 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;
|
|
}
|
|
}
|