// RowDataを残すため、@future execute にします global class NFM010WebService { // Integer batchsize = 200; 考量する必要がないと思います。 global class Achievements { webservice NFMUtil.Monitoring Monitoring; webservice NFM010WebService.Achievement[] Achievement; } global class Achievement { webservice String SoNo; webservice String QuotationCode; webservice String ReturnFlag; webservice String OverviewStatus; webservice String ContractNO; webservice String ContractReceivedDate; webservice String FirstApproveDate; webservice String SecondApproveDate; webservice String SoLatestDeliveryDate; webservice String DeliveryDate; webservice String InstallDate; webservice String Currency_x; webservice Decimal ContractAmount; webservice Decimal PaymentAmount; webservice String PaymentRate; webservice String DeliveryStatus; webservice String AssignmentStatus; webservice String PaymentStatus; webservice String InstallStatus; webservice String AuthorizationNo; webservice String ContractApplicationNo; webservice String PaymentTerms; webservice Decimal TimeLimit; webservice Decimal SalesChannel; } // 非同期を見せかけ、常にreturn void webservice static void NFM010(NFM010WebService.Achievements Achievements) { if (Achievements == null) { return; } NFMUtil.Monitoring Monitoring = Achievements.Monitoring; if (Monitoring == null) { return; } BatchIF_Log__c rowData = NFMUtil.saveRowData(Monitoring, 'NFM010', Achievements.Achievement); if (String.isBlank(rowData.Log__c) == false) execute(rowData.Id); } // @future // global static void executefuture(String rowData_Id) { // execute(rowData_Id); // } global static void execute(String rowData_Id) { // 20190424 CHAN-BBC75D NFM010Webservice停用,以后使用NFM010Rest // 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 = 'NFM010'; // iflog.MessageGroupNumber__c = rowData.MessageGroupNumber__c; // iflog.Log__c = logstr; // iflog.ErrorLog__c = ''; // insert iflog; // String rowDataStr = NFMUtil.getRowDataStr(rowData); // List achievementList = (List) JSON.deserialize(rowDataStr, List.class); // if (achievementList == null || achievementList.size() == 0) { // return; // } // // BatchIF転送表 から、コード変換のMapを作成 // Map transferMap = new Map(); // List transferList = [select Table__c, // Column__c, // External_value__c, // Internal_value__c // from BatchIF_Transfer__c // where Dropped_Flag__c = false // and Table__c = 'Statu_Achievements__c']; // for (BatchIF_Transfer__c t : transferList) { // transferMap.put(t.Column__c + t.External_value__c, t.Internal_value__c); // } // Savepoint sp = Database.setSavepoint(); // try { // // 更新対応配列とMapなどをセット // List oppNoList = new List(); // List statu_AchievementsList = new List(); // for (NFM010WebService.Achievement Achievement : achievementList) { // if (Achievement.SoNo == null || Achievement.SoNo == '' || // Achievement.QuotationCode == null || Achievement.QuotationCode == '' || // Achievement.TimeLimit == null // ) { // // 必須項目がない場合、処理と飛ばす // continue; // } // oppNoList.add(Achievement.QuotationCode); // statu_AchievementsList.add(Achievement.QuotationCode + ':' + Achievement.SoNo); // } // List oppList = [select Id, Opportunity_No__c, Min_FirstApproveDate__c, // Note_Residual_Result__c, IsImport__c // from Opportunity // where Opportunity_No__c in :oppNoList]; // Map oppsMap = new Map(); // for (Opportunity opp : oppList) { // oppsMap.put(opp.Opportunity_No__c, opp); // } // // 更新対応配列をセット // List staList = new List(); // Map staUpdateMap = new Map(); // staList = [select Id, Name, Opportunity__c, // Statu_Achievements_Ext__c, // ReturnFlag__c, // OverviewStatus__c, // ContractNO__c, // ContractReceivedDate__c, // FirstApproveDate__c, // LastApproveDate__c, // SoLatestDeliveryDate__c, // DeliveryDate__c, // InstallDate__c, // Collection_Day_Invoice__c, // CurrencyIsoCode, // ContractAmount__c, // PaymentAmount__c, // Paid_Amount_Rate__c, // X30_Deposit_Day__c, // Deposit_In_Full_Day__c, // PaymentRate__c, // DeliveryStatus__c, // AssignmentStatus__c, // PaymentStatus__c, // InstallStatus__c, // AuthorizationNo__c, // ContractApplicationNo__c, // PaymentTerms__c, // UnshippedAmount__c, // End_User_price__c // from Statu_Achievements__c // where Statu_Achievements_Ext__c in :statu_AchievementsList]; // for (Statu_Achievements__c statu_Achievements : staList) { // staUpdateMap.put(statu_Achievements.Statu_Achievements_Ext__c, statu_Achievements); // } // Map oppUpdateMap = new Map(); // for (NFM010WebService.Achievement Achievement : achievementList) { // if (Achievement.SoNo == null || Achievement.SoNo == '') { // // 必須項目がない場合、処理と飛ばす // iflog.ErrorLog__c += 'SoNo is required\n'; // continue; // } // if (Achievement.QuotationCode == null || Achievement.QuotationCode == '') { // // 必須項目がない場合、処理と飛ばす // iflog.ErrorLog__c += 'QuotationCode is required\n'; // continue; // } // if (Achievement.TimeLimit == null) { // // 必須項目がない場合、処理と飛ばす // iflog.ErrorLog__c += 'TimeLimit is required\n'; // continue; // } // // Boolean returnFlag = (Achievement.ReturnFlag == null || Achievement.ReturnFlag == '') ? false : true; // // Date lastApproveDate = NFMUtil.parseStr2Date(Achievement.SecondApproveDate, true); // // if (returnFlag && lastApproveDate == null) { // // iflog.ErrorLog__c += Achievement.SoNo + ' is (X), please set LastApproveDate\n'; // // continue; // // } // Opportunity opp = oppsMap.get(Achievement.QuotationCode); // if (opp == null) { // // 更新対象商談がない場合 // iflog.ErrorLog__c += '[' + Achievement.SoNo + ']Opportunity[' + Achievement.QuotationCode + ']NotExist\n'; // continue; // } // // 項目転送のセット // Statu_Achievements__c sta = new Statu_Achievements__c(); // sta.Statu_Achievements_Ext__c = Achievement.QuotationCode + ':' + Achievement.SoNo; // if (staUpdateMap.get(sta.Statu_Achievements_Ext__c) == null) { // staList.add(sta); // staUpdateMap.put(sta.Statu_Achievements_Ext__c, sta); // sta.Opportunity__c = opp.Id; // logstr += Achievement.QuotationCode + ':' + Achievement.SoNo + ' '; // } else { // sta = staUpdateMap.get(sta.Statu_Achievements_Ext__c); // } // sta.Name = Achievement.SoNo; // sta.ReturnFlag__c = (Achievement.ReturnFlag == null || Achievement.ReturnFlag == '') ? false : true; // sta.OverviewStatus__c = Achievement.OverviewStatus; // sta.ContractNO__c = Achievement.ContractNO; // sta.ContractReceivedDate__c = NFMUtil.parseStr2Date(Achievement.ContractReceivedDate, true); // sta.FirstApproveDate__c = NFMUtil.parseStr2Date(Achievement.FirstApproveDate, true); // sta.LastApproveDate__c = NFMUtil.parseStr2Date(Achievement.SecondApproveDate, true); // sta.SoLatestDeliveryDate__c = NFMUtil.parseStr2Date(Achievement.SoLatestDeliveryDate, true); // sta.DeliveryDate__c = NFMUtil.parseStr2Date(Achievement.DeliveryDate, true); // sta.InstallDate__c = NFMUtil.parseStr2Date(Achievement.InstallDate, true); // sta.Collection_Day_Invoice__c = sta.InstallDate__c == null ? null : System.today(); // sta.CurrencyIsoCode = Achievement.Currency_x == 'RMB' ? 'CNY' : Achievement.Currency_x; // sta.ContractAmount__c = Achievement.ContractAmount; // sta.PaymentAmount__c = Achievement.PaymentAmount; // System.debug(Logginglevel.ERROR, 'Paid_Amount_Rate +++++' + sta.Paid_Amount_Rate__c); // if (String.isNotEmpty(Achievement.PaymentRate)) { // String payment_Rate = Achievement.PaymentRate.substring(0, Achievement.PaymentRate.lastIndexOf(',')); // String payment_Rate_Date = Achievement.PaymentRate.substring(Achievement.PaymentRate.lastIndexOf(',') + 1); // System.debug(Logginglevel.ERROR, 'Paid_Amount_Rate _____' + Decimal.valueOf(payment_Rate.subString(0, payment_Rate.length() - 1))); // if ((sta.Paid_Amount_Rate__c == null || sta.Paid_Amount_Rate__c < 30) && Decimal.valueOf(payment_Rate.subString(0, payment_Rate.length() - 1)) >= 30.00) { // sta.X30_Deposit_Day__c = NFMUtil.parseStr2Date(payment_Rate_Date, true); // } // if (Decimal.valueOf(payment_Rate.subString(0, payment_Rate.length() - 1)) == 100.00) { // sta.Deposit_In_Full_Day__c = NFMUtil.parseStr2Date(payment_Rate_Date, true); // } // sta.PaymentRate__c = Achievement.PaymentRate.substring(0, Achievement.PaymentRate.lastIndexOf(',')); // } // sta.DeliveryStatus__c = Achievement.DeliveryStatus; // sta.AssignmentStatus__c = Achievement.AssignmentStatus; // sta.PaymentStatus__c = Achievement.PaymentStatus; // sta.InstallStatus__c = Achievement.InstallStatus; // sta.AuthorizationNo__c = Achievement.AuthorizationNo; // sta.ContractApplicationNo__c = Achievement.ContractApplicationNo; // sta.PaymentTerms__c = Achievement.PaymentTerms; // sta.UnshippedAmount__c = Achievement.TimeLimit; // NFMUtil.parseStr2Date(Achievement.TimeLimit, true) #1189の対応、UnshippedAmount__c にセット // sta.End_User_price__c = Achievement.SalesChannel; // NFMUtil.getMapValue(transferMap, 'SalesChannel__c', Achievement.SalesChannel, iflog); // // 引合の更新、最初の注残 // if (opp.Note_Residual_Result__c == '4' // SAP Winの後、ただし有効注残がない // && opp.IsImport__c == False // 是否从SFA转移的已结束询价 のデータでなはい // && opp.Min_FirstApproveDate__c == null // ) { // // 有効な注残かどうかの判断 Valid_Statu_Achievements__c // if ((sta.OverviewStatus__c == '冻结' || sta.OverviewStatus__c == '无效合同' || sta.ReturnFlag__c) == false) { // opp.Contract_Once_Recognize_Day__c = NFMUtil.parseStr2Date(Achievement.FirstApproveDate, true); // oppUpdateMap.put(opp.Id, opp); // } // } // } // if (staList.size() > 0) { // StaticParameter.EscapeNFM001Trigger = true; // StaticParameter.EscapeNFM001AgencyContractTrigger = true; // StaticParameter.EscapeNFM007Trigger = true; // StaticParameter.EscapeOpportunityBefUpdTrigger = true; // upsert staList Statu_Achievements_Ext__c; // if (oppUpdateMap.size() > 0) { // update oppUpdateMap.values(); // } // } // logstr += '\nend'; // rowData.retry_cnt__c = 0; // } catch (Exception ex) { // // エラーが発生した場合 // Database.rollback(sp); // System.debug(Logginglevel.ERROR, 'NFM010_' + rowData.MessageGroupNumber__c + ':' + ex.getMessage()); // System.debug(Logginglevel.ERROR, 'NFM010_' + 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; } }