@RestResource(urlMapping='/NFM205/*') global with sharing class NFM205Rest { global class GeDatas { public NFMUtil.Monitoring Monitoring; public GeData[] GeData; } global class GeData { public String Opportunity_Code; // 询价编码 public String Authorized_DB_No; // 授权申请编码 public String Authorized_Finish_Sales; // 授权的经销商code public String Authorized_Date; // 授权日 public String Autholization_Activated_Date; // 授权截至日 //public String Bidding_Company; public String Bid_Project_Name; public String Bidding_Content; public String Bid_Date; public String Bidding_No; public String Authorized_Status; // 授权结果 0:提交 1:成功 2:终止 3:解除授权申请的限制 //报价试算 授权 start public String IsFranchised; //是否特约授权 //报价试算 授权 end } @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, 'NFM205', ges.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, retry_cnt__c, 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 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 = 'NFM205'; iflog.MessageGroupNumber__c = rowData.MessageGroupNumber__c; iflog.Log__c = logstr; iflog.ErrorLog__c = ''; insert iflog; String rowDataStr = NFMUtil.getRowDataStr(rowData); List geDataList = (List) JSON.deserialize(rowDataStr, List.class); if (geDataList == null || geDataList.size() == 0) { return; } Savepoint sp = Database.setSavepoint(); try { List oppUpList = new List(); Map oppUpdateMap = new Map(); // 将询价CODE与ID存入MAP List oppNoList = new List(); List agencyList = new List(); for(GeData geData : geDataList) { oppNoList.add(geData.Opportunity_Code); if (String.isNotBlank(geData.Authorized_Finish_Sales)) { agencyList.add(geData.Authorized_Finish_Sales); } } List oppList = [select id, Opportunity_No__c, Agency1__r.Management_FormulaCode__c, Agency1__r.name, Agency2__r.Management_FormulaCode__c, Agency2__r.name from Opportunity where Opportunity_No__c in :oppNoList]; Map oppInfoMap = new Map(); for (Opportunity oppInfo : oppList) { oppInfoMap.put(oppInfo.Opportunity_No__c, oppInfo); } List accList = [select Name, Management_FormulaCode__c from Account where Management_FormulaCode__c in :agencyList]; Map accInfoMap = new Map(); for (Account accInfo : accList) { accInfoMap.put(accInfo.Management_FormulaCode__c, accInfo.Name); } // 将XML各数据项更新到报价对象中 for (GeData geData : geDataList) { if (geData.Opportunity_Code == null || geData.Opportunity_Code == '') { // 必須項目がない場合、処理と飛ばす iflog.ErrorLog__c += '询价编码不能为空。\n'; continue; } Opportunity opp = oppInfoMap.get(geData.Opportunity_Code); if (opp == null) { // 如果当前询价编码不存在 iflog.ErrorLog__c += geData.Opportunity_Code + ':询价编码不存在。\n'; continue; } if (oppUpdateMap.get(opp.Id) == null) { oppUpList.add(opp); oppUpdateMap.put(opp.Id, opp); logstr += opp.Opportunity_No__c + ':'; } else { opp = oppUpdateMap.get(opp.ID); } // 授权成功的场合 if (geData.Authorized_Status == '1') { opp.Authorized_Finish_Sales__c = accInfoMap.get(geData.Authorized_Finish_Sales); // 授权的经销商 opp.Authorized_DB_No__c = geData.Authorized_DB_No; // 授权申请编码 opp.Authorized_Date__c = NFMUtil.parseStr2Date(geData.Authorized_Date); // 授权日 opp.Autholization_Activated_Date__c = NFMUtil.parseStr2Date(geData.Autholization_Activated_Date); // 授权截至日 opp.Bidding_Content__c = geData.Bidding_Content; // 招标内容 opp.Bid_Date__c = NFMUtil.parseStr2Date(geData.Bid_Date); // 招标日 opp.Bidding_No__c = geData.Bidding_No; // 招标编码 opp.Bidding_Project_Name__c = geData.Bid_Project_Name; // 招标项目名 opp.If_Authorizing_Lock__c = false; // CHAN-BBW576 LHJ 20190508 Start opp.if_Interface_Lock__c = false; // CHAN-BBW576 LHJ 20190508 End //报价试算 授权 start if(String.isNotBlank(geData.IsFranchised)){ if(geData.IsFranchised.equals('是')){ opp.IsAuthorized__c = true; }else if(geData.IsFranchised.equals('否')){ opp.IsAuthorized__c = false; } } //报价试算 授权 end logstr += ' 授权成功。\n'; } else if(geData.Authorized_Status == '0') { // SPO授权提交的场合 opp.If_Authorizing_Lock__c = true; logstr += ' 授权申请提交。\n'; } else if(geData.Authorized_Status == '3') { //解除授权申请的限制 opp.IF_Submit__c = false; logstr += ' 解除授权申请的限制\n'; } else { opp.If_Authorizing_Lock__c = false; // CHAN-BBW576 LHJ 20190508 Start opp.if_Interface_Lock__c = false; // CHAN-BBW576 LHJ 20190508 End //报价试算 更新是否特约授权 false opp.IsAuthorized__c = false; //报价试算 end logstr += ' 授权中止。\n'; } opp.IF_Submit__c = false; // 更新是否授权中状态 //opp.If_Authorizing__c = false; } if (oppUpList.size() > 0) { update oppUpList; } logstr += '\nend'; rowData.retry_cnt__c=0; } catch(Exception ex) { // エラーが発生した場合 Database.rollback(sp); System.debug(Logginglevel.ERROR, 'NFM205_' + rowData.MessageGroupNumber__c + ':' + ex.getMessage()); System.debug(Logginglevel.ERROR, 'NFM205_' + 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; } }