// RowDataを残すため、@future execute にします global class NFM008WebService { public static boolean isRunning = false; // Integer batchsize = 200; 考量する必要がないと思います。 global class InstallationInformation { webservice NFMUtil.Monitoring Monitoring; webservice NFM008WebService.InstallationInfo[] InstallationInfo; } global class InstallationInfo { webservice NFM008WebService.InstallationInfoH InstallationInfoH; webservice NFM008WebService.InstallationInfoI[] InstallationInfoI; } global class InstallationInfoH { webservice String InquiryNo; webservice String InstallationDateH; // 受信しない webservice String PostingDate; webservice String CompanyCode; webservice String DepartmentCode; webservice String PurposeOfAdvice; } global class InstallationInfoI { webservice String MaterialNo; webservice Double Quantity; // 受信しない webservice String SerialNo; webservice String InstallationDateI; webservice String ReturnExchangeReplenishMark; // 返品区分、1の場合、レコード削除 webservice String SLMark; webservice String GuaranteePeriod; webservice String Location; webservice String PurposeOfAdvice; } // 非同期を見せかけ、常にreturn void webservice static void NFM008(NFM008WebService.InstallationInformation InstallationInformation) { if (InstallationInformation == null) { return; } NFMUtil.Monitoring Monitoring = InstallationInformation.Monitoring; if (Monitoring == null) { return; } BatchIF_Log__c rowData = NFMUtil.saveRowData(Monitoring, 'NFM008', InstallationInformation.InstallationInfo); if (String.isBlank(rowData.Log__c) == false) executefuture(rowData.Id); } @future global static void executefuture(String rowData_Id) { execute(rowData_Id); } global static void execute(String rowData_Id) { // CHAN-BB9CX4 20190419 NFM008Webservice停用,以后使用NFM008Rest // 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 = 'NFM008'; // iflog.MessageGroupNumber__c = rowData.MessageGroupNumber__c; // iflog.Log__c = logstr; // iflog.ErrorLog__c = ''; // insert iflog; // String rowDataStr = NFMUtil.getRowDataStr(rowData); // List installationInfoList = (List) JSON.deserialize(rowDataStr, List.class); // if (installationInfoList == null || installationInfoList.size() == 0) { // return; // } // NFM008WebService.isRunning = true; // Savepoint sp = Database.setSavepoint(); // try { // // 更新対応配列とMapなどをセット // List managementCodeList = new List(); // List productCodeList = new List(); // List productSerialNoList = new List(); // for (NFM008WebService.InstallationInfo InstallationInfo : installationInfoList) { // NFM008WebService.InstallationInfoH InstallationInfoH = InstallationInfo.InstallationInfoH; // if (InstallationInfoH == null) { // continue; // } // if (InstallationInfo.InstallationInfoI == null || InstallationInfo.InstallationInfoI.size() == 0) { // continue; // } // // InstallationInfoH より、病院と診療科の管理コード // InstallationInfoH.CompanyCode = NFMUtil.trimLeft(InstallationInfoH.CompanyCode, '0'); // InstallationInfoH.DepartmentCode = NFMUtil.trimLeft(InstallationInfoH.DepartmentCode, '0'); // if (InstallationInfoH.CompanyCode == null || InstallationInfoH.CompanyCode == '' || // InstallationInfoH.DepartmentCode == null || InstallationInfoH.DepartmentCode == '' // ) { // // 病院と診療科の管理コードがない場合、処理と飛ばす // continue; // } // managementCodeList.add(InstallationInfoH.CompanyCode); // managementCodeList.add(InstallationInfoH.DepartmentCode); // for (NFM008WebService.InstallationInfoI InstallationInfoI : InstallationInfo.InstallationInfoI) { // if (InstallationInfoI.MaterialNo == null || InstallationInfoI.MaterialNo == '' || // InstallationInfoI.SerialNo == null || InstallationInfoI.SerialNo == '' // ) { // // 商品コードがない場合、処理と飛ばす // continue; // } // productCodeList.add(InstallationInfoI.MaterialNo); // //MODIFY BY SUNLEI 20160808 // //productSerialNoList.add(InstallationInfoI.MaterialNo + ':' + InstallationInfoI.SerialNo.trim()); // productSerialNoList.add(InstallationInfoI.SerialNo.trim()); // } // } // // 診療科のみを取得 // List accList = [select Id, Management_Code__c, Department_Class__c, Hospital__c, RecordType.DeveloperName // from Account // where Management_Code__c in :managementCodeList]; // Map accsMap = new Map(); // for (Account acc : accList) { // accsMap.put(acc.Management_Code__c, acc); // } // List prdList = [select Id, Name, ProductCode, ProductCode_Ext__c, MDM_Model_No__c // from Product2 // where ProductCode_Ext__c in :productCodeList]; // Map prdsMap = new Map(); // for (Product2 prd : prdList) { // prdsMap.put(prd.ProductCode_Ext__c, prd); // } // List astList = [select Id, Name, Product2.ProductCode, SerialNumber, Product_Serial_No__c, Repair_Count__c, // Product2Id, AccountId, Account.Management_Code__c, Department_Class__c, Hospital__c, // Posting_Date__c, InstallDate, SLMark__c, // Guarantee_period_for_products__c, Installation_Site__c,OT_CODE__c, MDM_Model_No__c // from Asset // where SerialNumber in :productSerialNoList and Information_From__c <> '失单'];// and Delete_Flag__c = false]; // Map astsMap = new Map(); // Map astcheckMap = new Map(); // for (Asset ast : astList) { // //astsMap.put(ast.Product_Serial_No__c, ast); // astsMap.put(ast.MDM_Model_No__c + ':' + ast.SerialNumber, ast); // // HHOA-AGN2EH start // if (astcheckMap.containsKey(ast.MDM_Model_No__c + ':' + ast.SerialNumber) == false) { // astcheckMap.put(ast.MDM_Model_No__c + ':' + ast.SerialNumber, 1); // } else { // astcheckMap.put(ast.MDM_Model_No__c + ':' + ast.SerialNumber, astcheckMap.get(ast.MDM_Model_No__c + ':' + ast.SerialNumber) + 1); // } // // HHOA-AGN2EH end // } // // 更新対応配列をセット // astList = new List(); // Map astUpdateMap = new Map(); // List astDelList = new List(); // Map astDelMap = new Map(); // for (NFM008WebService.InstallationInfo InstallationInfo : installationInfoList) { // NFM008WebService.InstallationInfoH InstallationInfoH = InstallationInfo.InstallationInfoH; // if (InstallationInfoH == null) { // iflog.ErrorLog__c += 'Error! InstallationInfoH is required. This inquiry is skipped.\n'; // continue; // } // if (InstallationInfo.InstallationInfoI == null || InstallationInfo.InstallationInfoI.size() == 0) { // iflog.ErrorLog__c += 'Error! InstallationInfoI is required. This inquiry is skipped.\n'; // continue; // } //// InstallationInfoH.PurposeOfAdvice を見ない //// if (InstallationInfoH.PurposeOfAdvice == '1') { //// // deleteを無視 //// logstr += 'InstallationInfoH.PurposeOfAdvice==1 '; //// continue; //// } // // InstallationInfoH より、病院と診療科の管理コード // if (InstallationInfoH.CompanyCode == null || InstallationInfoH.CompanyCode == '') { // // 必須項目がない場合、処理と飛ばす // iflog.ErrorLog__c += 'Error! CompanyCode is required. This inquiry is skipped.\n'; // continue; // } // if (InstallationInfoH.DepartmentCode == null || InstallationInfoH.DepartmentCode == '') { // // 必須項目がない場合、処理と飛ばす // iflog.ErrorLog__c += 'Error! DepartmentCode is required. This inquiry is skipped.\n'; // continue; // } // if (accsMap.get(InstallationInfoH.CompanyCode) == null) { // iflog.ErrorLog__c += 'Error! Company[' + InstallationInfoH.CompanyCode + ']NotExist. This inquiry is skipped.\n'; // continue; // } else if (accsMap.get(InstallationInfoH.CompanyCode).RecordType.DeveloperName != 'HP' // && accsMap.get(InstallationInfoH.CompanyCode).RecordType.DeveloperName != 'Agency') { // iflog.ErrorLog__c += 'Error! Company[' + InstallationInfoH.CompanyCode + ']Is Not HP(Agency). This inquiry is skipped.\n'; // continue; // } // if (accsMap.get(InstallationInfoH.DepartmentCode) == null) { // iflog.ErrorLog__c += 'Error! Department[' + InstallationInfoH.DepartmentCode + ']NotExist. This inquiry is skipped.\n'; // continue; // } // for (NFM008WebService.InstallationInfoI InstallationInfoI : InstallationInfo.InstallationInfoI) { // if (InstallationInfoI.MaterialNo == null || InstallationInfoI.MaterialNo == '') { // // 必須項目がない場合、処理と飛ばす // iflog.ErrorLog__c += 'Error! MaterialNo is required. This asset is skipped.\n'; // continue; // } // if (InstallationInfoI.SerialNo == null || InstallationInfoI.SerialNo == '') { // // 必須項目がない場合、処理と飛ばす // iflog.ErrorLog__c += 'Error! Product[' + InstallationInfoI.MaterialNo + '] SerialNo is required. This asset is skipped.\n'; // continue; // } // Product2 prd = prdsMap.get(InstallationInfoI.MaterialNo); // if (prd == null) { // iflog.ErrorLog__c += 'Error! [' + InstallationInfoI.SerialNo + ']Product[' + InstallationInfoI.MaterialNo + ']NotExist. This asset is skipped.\n'; // continue; // } // // HHOA-AGN2EH start // if (astcheckMap.containsKey(prd.MDM_Model_No__c + ':' + InstallationInfoI.SerialNo.trim()) == true && astcheckMap.get(prd.MDM_Model_No__c + ':' + InstallationInfoI.SerialNo.trim()) > 1) { // iflog.ErrorLog__c += 'Error! [' + InstallationInfoI.SerialNo + ']Product[' + InstallationInfoI.MaterialNo + '] Exist more than one. This asset is skipped.\n'; // continue; // } // // HHOA-AGN2EH end // Asset ast = astsMap.get(prd.MDM_Model_No__c + ':' + InstallationInfoI.SerialNo.trim()); // if (ast == null) { // // 保有設備存在しないのに、delete 受信の場合 // //if (InstallationInfoI.ReturnExchangeReplenishMark == '1' || InstallationInfoI.PurposeOfAdvice == '1') { // // HHOA-AGN2EH start // //iflog.ErrorLog__c += 'Warning! Delete Asset[' + InstallationInfoI.MaterialNo + ':' + InstallationInfoI.SerialNo + ']NotExist\n'; // // HHOA-AGN2EH end // // continue; // //} // //iflog.ErrorLog__c += '194[prd.MDM_Model_No__c:' + prd.MDM_Model_No__c + ']SUNLEI TEST[InstallationInfoI.SerialNo' + InstallationInfoI.SerialNo + '] DEUG\n'; // //iflog.ErrorLog__c += '195[prd.MDM_Model_No__c:' + prd.MDM_Model_No__c + ']SUNLEI TEST[InstallationInfoI.SerialNo' + InstallationInfoI.SerialNo + '] DEUG\n'; // //add by sunlei 20160810 保有設備存在しない新規の場合、何もしない // ast = new Asset(); // ast.SerialNumber = InstallationInfoI.SerialNo.trim(); // //continue; // } else { // if (InstallationInfoI.ReturnExchangeReplenishMark == '1' || InstallationInfoI.PurposeOfAdvice == '1') { // // 物理削除用 // if (astDelMap.get(ast.Product_Serial_No__c) == null) { // astDelList.add(ast); // astDelMap.put(ast.Product_Serial_No__c, ast); // } // logstr += InstallationInfoI.MaterialNo + ':' + InstallationInfoI.SerialNo + '(delete) '; // // 修理がある場合、Warning! を出す // if (ast.Repair_Count__c > 0) { // // HHOA-AGN2EH start // //iflog.ErrorLog__c += 'Warning! Delete Asset[' + InstallationInfoI.MaterialNo + ':' + InstallationInfoI.SerialNo + '] with repair.\n'; // // HHOA-AGN2EH end // } // continue; // } // // HHOA-AGN2EH start // if (ast.Hospital__c != accsMap.get(InstallationInfoH.CompanyCode).Id){ // iflog.ErrorLog__c += 'Warning! CompanyCode:' + '[' + InstallationInfoH.CompanyCode + '] is not match with the Asset[' + ast.OT_CODE__c +':'+ast.SerialNumber+']. This asset is skipped.\n'; // continue; // } // // HHOA-AGN2EH end // //Modify by sunlei 20160804 更新的情况下 判断科室是否一致 // if (ast.AccountId != accsMap.get(InstallationInfoH.DepartmentCode).Id){ // // interface科室 <>保有设备的科室、処理と飛ばす // iflog.ErrorLog__c += 'Warning! Asset' + '[' + ast.OT_CODE__c + ':' + ast.SerialNumber + '] DepartmentCode:' + ast.Account.Management_Code__c + ' is updated to '+ InstallationInfoH.DepartmentCode + '.\n'; // // HHOA-AGN2EH start // //continue; // // HHOA-AGN2EH end // } // } // if (InstallationInfoI.InstallationDateI == null || InstallationInfoI.InstallationDateI == '') { // // 必須項目がない場合、処理と飛ばす // iflog.ErrorLog__c += 'Error! [' + InstallationInfoI.MaterialNo + ':' + InstallationInfoI.SerialNo + ']InstallationDateI is required. This asset is skipped.\n'; // continue; // } // if (InstallationInfoI.SLMark == null || InstallationInfoI.SLMark == '') { // // 必須項目がない場合、処理と飛ばす // iflog.ErrorLog__c += 'Error! [' + InstallationInfoI.MaterialNo + ':' + InstallationInfoI.SerialNo + ']SLMark is required. This asset is skipped.\n'; // continue; // } // //Add by sunlei 20160804 更新的情况下[保有设备]的OT-CODE和机身编号一致进行更新 // if (ast.SerialNumber == InstallationInfoI.SerialNo.trim() && // ast.MDM_Model_No__c == prdsMap.get(InstallationInfoI.MaterialNo).MDM_Model_No__c && // ast.OT_CODE__c != InstallationInfoI.MaterialNo ){ // iflog.ErrorLog__c += 'Warning! Asset' + '[' + ast.OT_CODE__c + ':' + ast.SerialNumber + '] is updated to [' + InstallationInfoI.MaterialNo + ':' + InstallationInfoI.SerialNo + ']\n'; // //iflog.ErrorLog__c += '241Warning! Asset' + '[' + ast.OT_CODE__c + ':' + ast.SerialNumber + '] is sunleitest to [' + InstallationInfoI.MaterialNo + ':' + InstallationInfoI.SerialNo + ']\n'; // //continue; // } // // upsert用、項目転送 // ast.Product_Serial_No__c = InstallationInfoI.MaterialNo + ':' + InstallationInfoI.SerialNo.trim(); // if (astUpdateMap.get(ast.Product_Serial_No__c) == null) { // astList.add(ast); // astUpdateMap.put(ast.Product_Serial_No__c, ast); // logstr += InstallationInfoI.MaterialNo + ':' + InstallationInfoI.SerialNo.trim() + ' '; // } else { // ast = astUpdateMap.get(ast.Product_Serial_No__c); // } // ast.Name = prd.Name; // ast.Order_No__c = InstallationInfoH.InquiryNo; // ast.Posting_Date__c = NFMUtil.parseStr2Date(InstallationInfoH.PostingDate); // ast.AccountId = accsMap.get(InstallationInfoH.DepartmentCode).Id; // ast.Department_Class__c = accsMap.get(InstallationInfoH.DepartmentCode).Department_Class__c; // // HHOA-AGN2EH start // //ast.Hospital__c = accsMap.get(InstallationInfoH.CompanyCode).Id; // // HHOA-AGN2EH end // ast.Product2Id = prdsMap.get(InstallationInfoI.MaterialNo).Id; // // HHOA-AGN2EH start // //ast.SerialNumber = InstallationInfoI.SerialNo.trim(); // // HHOA-AGN2EH end // ast.InstallDate = NFMUtil.parseStr2Date(InstallationInfoI.InstallationDateI); // ast.SLMark__c = InstallationInfoI.SLMark; // // CHAN-AVC54T start // //ast.Guarantee_period_for_products__c = NFMUtil.parseStr2Date(InstallationInfoI.GuaranteePeriod); // Date gp = NFMUtil.parseStr2Date(InstallationInfoI.GuaranteePeriod); // if (gp != null) { // ast.Guarantee_period_for_products__c = gp; // } // // CHAN-AVC54T end // //if (InstallationInfoI.Location != null) { // // ast.Installation_Site__c = InstallationInfoI.Location; // //} // ast.IF_Information_From__c = true; // } // } // System.debug('astList +++++' + astList); // if (astList.size() > 0) { // upsert astList; // } // if (astDelList.size() > 0) { // //delete astDelList; // // TODO 今後 返品設備の科室に移動する可能性がある // // HHOA-AGN2EH start // //for (Asset ast : astDelList) { // // ast.Return_Flag__c = true; // //} // //update astDelList; // // HHOA-AGN2EH end // } // logstr += '\nend'; // rowData.retry_cnt__c=0; // } catch(Exception ex) { // // エラーが発生した場合 // Database.rollback(sp); // System.debug(Logginglevel.ERROR, 'NFM008_' + rowData.MessageGroupNumber__c + ':' + ex.getMessage()); // System.debug(Logginglevel.ERROR, 'NFM008_' + 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; } }