@RestResource(urlMapping='/CPL003/*')
|
global with sharing class CPL003Rest {
|
global class GeDatas {
|
webService NFMUtil.Monitoring Monitoring;
|
webService CPL003Rest.GeData[] Inventory;
|
}
|
|
global class GeData {
|
webService String MaterialNumber; //产品编码(产品代码)
|
webService String ItemQuantity; //OpenPO和库存的总数量
|
|
webService String Area; //区域(待定)
|
//webservice String other1;
|
//webservice String other2;
|
//webservice String other3;
|
}
|
|
@HttpPost
|
global static void execute() {
|
// 取得接口传输内容
|
String strData = RestContext.request.requestBody.toString();
|
GeDatas ges = (GeDatas) JSON.deserializeStrict(strData, GeDatas.class);
|
|
if (ges == null) {
|
return;
|
}
|
|
NFMUtil.Monitoring Monitoring = ges.Monitoring;
|
if (Monitoring == null) {
|
return;
|
}
|
|
BatchIF_Log__c rowData = NFMUtil.saveRowData(Monitoring, 'CPL003', ges.Inventory);
|
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
|
];
|
//MDMITMWebService.isRunning = true; //Commented By Li Jun 20230428
|
String logstr = rowData.MessageGroupNumber__c + ' start\n';
|
BatchIF_Log__c iflog = new BatchIF_Log__c();
|
iflog.Type__c = 'CPL003';
|
iflog.MessageGroupNumber__c = rowData.MessageGroupNumber__c;
|
iflog.Log__c = logstr;
|
iflog.ErrorLog__c = '';
|
insert iflog;
|
|
String rowDataStr = NFMUtil.getRowDataStr(rowData);
|
//rowDataStr = XMLTools.xml2json(rowDataStr);
|
List<GeData> itemMasterList = (List<GeData>) JSON.deserialize(rowDataStr, List<GeData>.class);
|
|
if (itemMasterList == null || itemMasterList.size() == 0) {
|
return;
|
}
|
|
Savepoint sp = Database.setSavepoint();
|
|
try {
|
List<String> materialNumberList = new List<String>();
|
|
for (GeData GeData : itemMasterList) {
|
if (String.isBlank(GeData.MaterialNumber))
|
continue;
|
if (String.isBlank(GeData.ItemQuantity))
|
continue;
|
materialNumberList.add(GeData.MaterialNumber);
|
}
|
|
List<Product2> product2List = [
|
SELECT Id, ProductCode, StorageStatusNo__c
|
FROM Product2
|
WHERE ProductCode IN :materialNumberList
|
];
|
|
Map<String, Product2> product2Map = new Map<String, Product2>();
|
for (Product2 product2 : product2List) {
|
product2Map.put(product2.ProductCode, product2);
|
}
|
|
List<Product2> upsertProList = new List<Product2>();
|
Map<String, Product2> prdUpdateMap = new Map<String, Product2>();
|
|
for (GeData GeData : itemMasterList) {
|
if (String.isBlank(GeData.MaterialNumber)) {
|
iflog.ErrorLog__c += 'MaterialNumber is required.\n';
|
continue;
|
}
|
|
if (product2Map.containsKey(GeData.MaterialNumber)) {
|
Product2 product = product2Map.get(GeData.MaterialNumber);
|
product.StorageStatusNo__c = Double.valueOf(GeData.ItemQuantity);
|
upsertProList.add(product);
|
} else {
|
iflog.ErrorLog__c += 'This MaterialNumber [ ' + GeData.MaterialNumber + ' ] is not Exist.\n';
|
continue;
|
}
|
}
|
|
if (upsertProList.size() > 0)
|
upsert upsertProList;
|
|
logstr += '\nend';
|
rowData.retry_cnt__c = 0;
|
} catch (Exception ex) {
|
// エラーが発生した場合
|
Database.rollback(sp);
|
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;
|
}
|
}
|