@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 itemMasterList = (List) JSON.deserialize(rowDataStr, List.class); //if (itemMasterList == null || itemMasterList.size() == 0) { // return; //} //Savepoint sp = Database.setSavepoint(); //try { // // 更新対応配列とMapなどをセット // List productCodeList = new List(); // for (GeData GeData : itemMasterList) { // if (GeData.ProductCode == null || GeData.ProductCode == '') { // // 必須項目がない場合、処理と飛ばす // continue; // } // productCodeList.add(GeData.ProductCode); // } // List 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 prdsMap = new Map(); // for (Product2 prd : prdList) { // prdsMap.put(prd.ProductCode, prd); // } // // 更新対応配列をセット // prdList = new List(); // Map prdUpdateMap = new Map(); // 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 pbeList = [Select Product2Id, CurrencyIsoCode, UnitPrice, Pricebook2Id From PricebookEntry where Product2Id in: prdList and Pricebook2Id = :pricebookId order by Product2Id, CurrencyIsoCode]; // List pbeInsertList = new List(); // Map rmbMap = new Map(); // Map usdMap = new Map(); // 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; } }