/** * MaintenanceContractTrigger.trigger より NFM106Trigger() を呼び出す */ global without sharing class NFM401Controller { public static boolean isRunning = false; public static String status; public static String logstr; public static List sendMails; public class RepairRequests_elementdummy { // 因为附件原因,没法保存全部日志信息,RowData和发送数据分开 public RepairRequest_elementdummy[] GeneralDatadummy; } public class RepairRequests_element { public RepairRequest_element[] GeneralData; } public class RepairRequest_elementdummy { public String SYSTEM_SOURCEID; public String SYSTEM_STATUS; } public class RepairRequest_element { public String SYSTEM_SOURCE_REF_NO; public String SYSTEM_SOURCE; public String INITIATOR; public String EVENT_DATE; public String AWARE_DATE; public String REPORTING_PERSON; public String IS_THIS_COMPLAINT; public String EVENT_FOUND_AT; public String DEC_TREE_ANS_1; public String DEC_TREE_ANS_2; public String CUSTOMER_TELEPHONE; public String COUNTRY; public String ITEM_CODE; public String LOT_SERIAL; public String PRODUCT_RECEIPT_DATE; public String EVALUATION_RESULT; public String EVALUATION_COMPLETION_DATE; public String EVALUATION_COMPLETED_BY; public String INVESTIGATION_REQUIRED; public String INVESTIGATION_DECISION_BY; public String INVESTIGATION_DECISION_DATE; public String COMPLAINT_CLOSURE_DATE; public String EVALUATION_INITIATION_DATE; public String INITIATION_DATE; public String INSTALLATION_DATE; public String EVENTDATE_UNKNOWN; public String ASSIGN_TO; public String SEND_REPORT_COMPETENT_AUTH; public String PROC_THERAPEUTIC_DIAGNOSTIC; public String GLOBAL_ATTRIBUTE1; public String GLOBAL_ATTRIBUTE4; public String SYSTEM_SOURCE_REF_NO_2; public String PRODUCT_TO_BE_RETURNED; public String CORRECTION_ACTION; public String INITIATOR_LOCATION; public String RECORD_INSERTED_DATE; public String CUSTOMER_RESPONSE_REQUESTED; public String ORDER_TYPE; public String NAME_OF_COMPETENT_AUTH; public String NEED_TO_RTRN_ITEM_TO_CUST; public String GLOBAL_ATTRIBUTE3; public String NO_INVESTIGATION_RATIONALE; public String COMPLAINT_CLOSED_BY; public String EVALUATION_INITIATION_BY; public String SYSTEM_SOURCE_2; public String ACTIONS_TAKEN_AT_CUST_SITE; public Local_element[] Local; public Arcode_element[] AR_CODE; public AanaCaucode_element[] ANA_CAU_CODE; public Attachment_element[] ATTACHMENT; } public class Local_element { public String EVENT_DESCRIPTION_LOCAL_LANG; public String CUSTOMER_NAME_LOCAL_LANG; public String CUSTOMER_CITY_LOCAL_LANG; public String CUSTOMER_ADDRESS_LOCAL_LANG; public String CORRECTION_DESC_LOCAL_LANG; public String DEPARTMENT_LOCAL_LANG; public String REPORTING_PERSON_LOCAL_LANG; public String STATE_LOCAL_LANG; public String EVALUATION_RESULT_LOCAL_LANG; public String OTHR_PROD_INVOLVED_LOCAL_LANG; public String RECORD_INSERTED_DATE; public String CDS_METHOD_LOCAL_LANG; } public class Arcode_element { public String AS_REPORTED_CODE; public String AS_REPORTED_DESCRIPTION; public String RECORD_INSERTED_DATE; } public class AanaCaucode_element { public String PART_CODE; public String PART_CODE_DESC; public String AS_ANALYZED_CODE; public String AS_ANALYZED_CODE_DESC; public String CAUSE_CODE; public String CAUSE_CODE_DESC; public String RECORD_INSERTED_DATE; } public class Attachment_element { public String FILE_DATA; public String ATTACHMENT_FIELD_NAME; public String FILE_NAME; public String GLOBAL_ATTRIBUTE1; public String RECORD_INSERTED_DATE; } webservice static void sendToETQ(String iflog_Id,BatchIF_Log__c rowDataSFDC, List repairIds,String statu){ if(statu == '' || statu == null){ statu = 'R3'; } callout(iflog_Id,rowDataSFDC,repairIds,statu); } /** * NFMnewの送信処理 * * @param iflog_Id ログテーブルのId * @param repairIds 送信対象取引先 */ // @future (callout=true) public static void callout(String iflog_Id,BatchIF_Log__c rowDataSFDC, List repairIds,String statu) { if (repairIds == null || repairIds.size() == 0) { return; } if(statu == '' || statu == null){ statu = 'R3'; } sendMails = new List(); // MessageGroupNumber の取得 List iflogList = [Select Id, Name, Log__c, ErrorLog__c from BatchIF_Log__c where Id = :iflog_Id]; BatchIF_Log__c iflog = new BatchIF_Log__c(); if (iflogList.size() > 0) { iflog = iflogList.get(0); iflog.ErrorLog__c = ''; } else { // データ取れってないとは、rollbackされていることです //return; iflog.Type__c = 'NFM401'; iflog.ErrorLog__c = ''; iflog.Log__c = 'callout start\n'; iflog.Log__c = 'statu' + statu +'\n'; } // String logstr = iflog.Log__c + '\nNumberOfRecord=' + repairIds.size() + ' '; logstr = iflog.Log__c + '\nNumberOfRecord=' + repairIds.size() + ' '; RepairRequests_element quotations = new RepairRequests_element(); RepairRequests_elementdummy quotationsdummy = new RepairRequests_elementdummy(); // 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 = 'Repair__c' or Table__c = 'QIS_Report__c')]; for (BatchIF_Transfer__c t : transferList) { transferMap.put(t.Column__c + t.Internal_value__c, t.External_value__c); } try { // 根据修理ID取得修理相关信息 List repairList = [select Id, Name, OSH_Affirmant__c, OSH_Affirmant__r.Username, Failure_Occurrence_Date__c, ProblemOccurred__c, ifDeadHurt__c, PAE_DetermineResultsText__c, HospitalPhone__c, OT_CODE__c, SerialNumber__c, On_Site_Repair_Order_Date__c, Failure_Source__c, Repair_Inspection_Date__c, Repair_Returned_To_HP_Date__c, CreatedDate, PurchaseOrInstallationDate__c, ReportAdverseEvents__c, ASReportedCodeAC__c, Repair_Ordered_Date__c, // local部分 Incharge_Staff__r.Alias__c, Repair_Detail__c, HP_Name__c, State_Hospital__c, HospitalAddress_formula__c, Department_Name__c, SupportingProducts__c, // local部分 //add by rentongxaio 2020-09-15 start AE_DetermineResult__c, DateReceiptQuestions__c, FSE_ApplyForRepair_Day__c, WhatProject__c, OCSM_RC_CordingDate__c, IISE_confirmed_person__c, OCSM_RC_CordingUser__r.Username, OCSM_RC_CordingUser__r.Name, OCSM_RC_CordingUser__c, Hospital__r.City_Master__r.Name, Incharge_Staff__r.Name__c, Asset_Owner__c, IS_AE__c, PAE_DetermineResults__c, Incharge_Staff__r.Username, IISE_confirmed_day__c, Incharge_Staff__r.Name, OSH_Affirmant__r.Name, OSH_ConfirmationDate__c, PAE_Determine__c, //add by rentongxaio 2020-09-15 end Return_Without_Repair_Date__c, PAE_DetermineAC__c, ASReportedCode__c, Delivered_Product__r.unknow_serial_NO_product__c from Repair__c where Id in : repairIds]; // 根据修理和QIS ID取得修理附件相关信息 List attachmentList = [select Id, Name, Body, ParentId, BodyLength from Attachment where ParentId in : repairIds]; Map> rAMap = new Map>(); for (Attachment ra: attachmentList ) { if (!rAMap.containsKey(ra.ParentId)) { rAMap.put(ra.ParentId, new List()); } rAMap.get(ra.ParentId).add(ra); } // 根据修理ID取得QIS相关信息 List qISList = [select id,Name, OSH_Affirmant__c, OSH_Affirmant__r.Username, Faliour_date__c, failuer_situation__c, Damage_For_Doc_Or_Pat__c, PAE_DetermineResultsText__c, HospitalPhone__c, ProductCode_Ext__c, lot_or_serial__c, Product_Receipt_Date__c, QIS_Reply_Comment__c, QIS_Reply_Comment1__c, OSH_judgement__c, Evaluation_Completion_Date__c, CreatedDate, QISInstallDate__c, Report_For_Goz__c, problem_detail__c, Hospital__c, City_Master__c, HospitalAddress_formula__c, Hospital_Department__c, ASReportedCodeAC__c, OCM_RC_RecievedDate__c, OSH_Nogoods__c, OCSM_Nogoods__c, OSHRecievedDate__c, // local部分 owner__c, accsessary_detail__c, // local部分 AE_DetermineResult__c, Trable_occur_daY_collect__c, RC_inspection_date__c, QIS_ConfirmationDate__c, IS_AE__c, PAE_DetermineResults__c, OSH_ConfirmationDate__c, Which_Project__c, OSH_Affirmant__r.Name, PAE_Determine__c, next_action__c, PAE_DetermineAC__c, //add by rentongxiao 2020-09-21 start demo_or_asset__c, QIS_submit_date_for_MBC__c, Department_Name__c, usage_frequence__c, cds_methods__c, cleanning__c, disinfection__c, sterlization__c, Owner.Name, Hospital__r.Name, ASReportedCode__c, Hospital__r.Address__c, //add by rentongxiao 2020-09-21 end nonyushohin__r.unknow_serial_NO_product__c, nonyushohin__c, QIS_Submit_day__c, QIS_no_for_m_BC__c from QIS_Report__c where Id in :repairIds ]; // 实际发送数据 quotations.GeneralData = new List(); // Rowdata存储数据 quotationsdummy.GeneralDatadummy = new List(); String username = UserInfo.getName(); for (Repair__c rr : repairList) { RepairRequest_element RepairRequest = new RepairRequest_element(); RepairRequest_elementdummy RepairRequestdummy = new RepairRequest_elementdummy(); quotations.GeneralData.add(RepairRequest); quotationsdummy.GeneralDatadummy.add(RepairRequestdummy); RepairRequestdummy.SYSTEM_SOURCEID = rr.Id; //add by rentongxiao 2020-09-15 start RepairRequestdummy.SYSTEM_STATUS = statu; //add by rentongxiao 2020-09-15 end RepairRequest.SYSTEM_SOURCE_REF_NO = rr.Name ; RepairRequest.SYSTEM_SOURCE = 'OCSM-SFDC' ; if (statu == 'R1') { RepairRequest.INITIATOR = username; // gzw 20211229 AE的时候,不管PAE判断结果,需要Aware Date。 fix start // if (rr.PAE_Determine__c != 'Unknown') { if (rr.PAE_Determine__c != 'Unknown' || rr.AE_DetermineResult__c == 'AE') { // gzw 20211229 AE的时候,不管PAE判断结果,需要Aware Date。 fix end RepairRequest.AWARE_DATE = NFMUtil.formatDate2Str(rr.DateReceiptQuestions__c) ; } RepairRequest.INVESTIGATION_REQUIRED = null ; RepairRequest.ASSIGN_TO = 'OSH RA' ; RepairRequest.INITIATOR_LOCATION = 'Olympus Medical : OSH'; }else if (statu == 'R2') { RepairRequest.INITIATOR_LOCATION = 'Olympus Medical : OSH'; RepairRequest.INITIATOR = username; RepairRequest.ASSIGN_TO = 'OSH RA' ; RepairRequest.INVESTIGATION_REQUIRED = null ; // gzw 20211229 AE的时候,不管PAE判断结果,需要Aware Date。 fix start // if (rr.PAE_DetermineAC__c != 'Unknown') { if (rr.PAE_DetermineAC__c != 'Unknown' || rr.AE_DetermineResult__c == 'AE') { // gzw 20211229 AE的时候,不管PAE判断结果,需要Aware Date。 fix end RepairRequest.AWARE_DATE = NFMUtil.formatDate2Str(rr.Repair_Inspection_Date__c) ; } RepairRequest.EVALUATION_INITIATION_DATE = NFMUtil.formatDate2Str(Date.today()) ; RepairRequest.EVALUATION_INITIATION_BY = username; }else if (statu == 'R3') { RepairRequest.INITIATOR_LOCATION = 'Olympus Medical : OCSM'; if (String.isNotBlank(rr.Incharge_Staff__c)) { RepairRequest.INITIATOR = rr.Incharge_Staff__r.Name; } if (rr.IISE_confirmed_day__c != null) { RepairRequest.EVALUATION_COMPLETION_DATE = NFMUtil.formatDate2Str(rr.IISE_confirmed_day__c); RepairRequest.INVESTIGATION_DECISION_DATE = NFMUtil.formatDate2Str(rr.IISE_confirmed_day__c) ; RepairRequest.COMPLAINT_CLOSURE_DATE = NFMUtil.formatDate2Str(rr.IISE_confirmed_day__c) ; }else { RepairRequest.EVALUATION_COMPLETION_DATE = NFMUtil.formatDate2Str(rr.OCSM_RC_CordingDate__c); RepairRequest.INVESTIGATION_DECISION_DATE = NFMUtil.formatDate2Str(rr.OCSM_RC_CordingDate__c) ; RepairRequest.COMPLAINT_CLOSURE_DATE = NFMUtil.formatDate2Str(rr.OCSM_RC_CordingDate__c) ; } if (rr.IISE_confirmed_person__c != null) { RepairRequest.EVALUATION_COMPLETED_BY = rr.IISE_confirmed_person__c; RepairRequest.INVESTIGATION_DECISION_BY = rr.IISE_confirmed_person__c; RepairRequest.COMPLAINT_CLOSED_BY = rr.IISE_confirmed_person__c; RepairRequest.EVALUATION_INITIATION_BY = rr.IISE_confirmed_person__c; }else { RepairRequest.EVALUATION_COMPLETED_BY = rr.OCSM_RC_CordingUser__r.Name; RepairRequest.INVESTIGATION_DECISION_BY = rr.OCSM_RC_CordingUser__r.Name; RepairRequest.COMPLAINT_CLOSED_BY = rr.OCSM_RC_CordingUser__r.Name; RepairRequest.EVALUATION_INITIATION_BY = rr.OCSM_RC_CordingUser__r.Name; } RepairRequest.INVESTIGATION_REQUIRED = 'N' ; RepairRequest.EVALUATION_INITIATION_DATE = NFMUtil.formatDate2Str(rr.OCSM_RC_CordingDate__c) ; RepairRequest.NO_INVESTIGATION_RATIONALE = 'This is a non-reportable malfunction complaint according to the RSS. This failure mode will be monitored through on-going trending.'; if (rr.Return_Without_Repair_Date__c == null) { RepairRequest.CORRECTION_ACTION = 'Routine repair; no corrective action required.'; }else if (rr.Return_Without_Repair_Date__c != null) { RepairRequest.CORRECTION_ACTION = 'Return goods; no corrective action required.'; } RepairRequest.ASSIGN_TO = null ; } RepairRequest.CUSTOMER_RESPONSE_REQUESTED = 'N'; RepairRequest.ORDER_TYPE = NFMUtil.getMapValue(transferMap,'Asset_Owner__c', rr.Asset_Owner__c, iflog) ; RepairRequest.NAME_OF_COMPETENT_AUTH = rr.ReportAdverseEvents__c == '有' ? 'Local PMPA' : null; RepairRequest.NEED_TO_RTRN_ITEM_TO_CUST = 'N'; RepairRequest.GLOBAL_ATTRIBUTE3 = String.valueOf(rr.DateReceiptQuestions__c); RepairRequest.EVENT_DATE = NFMUtil.formatDate2Str(rr.Failure_Occurrence_Date__c) ; RepairRequest.REPORTING_PERSON = null ; RepairRequest.IS_THIS_COMPLAINT = 'Y' ; RepairRequest.EVENT_FOUND_AT = NFMUtil.getMapValue(transferMap, 'ProblemOccurred__c', rr.ProblemOccurred__c, iflog); RepairRequest.DEC_TREE_ANS_1 = NFMUtil.getMapValue(transferMap, 'ifDeadHurt__c', rr.ifDeadHurt__c, iflog); if (rr.ifDeadHurt__c == '无') { if (rr.PAE_DetermineResultsText__c == 'PAE') { RepairRequest.DEC_TREE_ANS_2 = 'Y' ; } if (rr.PAE_DetermineResultsText__c == 'nonPAE') { RepairRequest.DEC_TREE_ANS_2 = 'N' ; } if (rr.PAE_DetermineResultsText__c == 'Unknown') { RepairRequest.DEC_TREE_ANS_2 = 'U' ; } } RepairRequest.CUSTOMER_TELEPHONE = String.isBlank(rr.HospitalPhone__c) ? '/' : rr.HospitalPhone__c; RepairRequest.COUNTRY = 'China' ; RepairRequest.ITEM_CODE = rr.OT_CODE__c ; RepairRequest.LOT_SERIAL = rr.Delivered_Product__r.unknow_serial_NO_product__c == true ? 'Unknown' : rr.SerialNumber__c.indexOf('(') > 0 ? rr.SerialNumber__c.subString(0,rr.SerialNumber__c.indexOf('(')) : rr.SerialNumber__c ; RepairRequest.PRODUCT_RECEIPT_DATE = NFMUtil.formatDate2Str(rr.Repair_Ordered_Date__c); RepairRequest.EVALUATION_RESULT = null; RepairRequest.INITIATION_DATE = NFMUtil.formatDate2Str(rr.FSE_ApplyForRepair_Day__c) ; // 精琢科技 2022-03-03 LJPH-CC5ANQ 【委托】之前会传一个1900-1-1的日期,导致报错,现在改为传null zxk start if(rr.PurchaseOrInstallationDate__c != null){ RepairRequest.INSTALLATION_DATE = NFMUtil.formatDate2Str(rr.PurchaseOrInstallationDate__c) ; }else{ RepairRequest.INSTALLATION_DATE = null; } // 精琢科技 2022-03-03 LJPH-CC5ANQ 【委托】之前会传一个1900-1-1的日期,导致报错,现在改为传null zxk end RepairRequest.EVENTDATE_UNKNOWN = null ; RepairRequest.SEND_REPORT_COMPETENT_AUTH = NFMUtil.getMapValue(transferMap,'ReportAdverseEvents__c', rr.ReportAdverseEvents__c, iflog) ; RepairRequest.PROC_THERAPEUTIC_DIAGNOSTIC = NFMUtil.getMapValue(transferMap,'WhatProject__c', rr.WhatProject__c, iflog) ; RepairRequest.GLOBAL_ATTRIBUTE1 = 'Olympus Medical : OSH' ; RepairRequest.PRODUCT_TO_BE_RETURNED = rr.Repair_Ordered_Date__c == null ? 'N' : 'Y'; RepairRequest.RECORD_INSERTED_DATE = NFMUtil.formatDate2Str(Date.today()); // Local取修理上信息 RepairRequest.Local = new List(); Local_element Localdet = new Local_element(); RepairRequest.Local.add(Localdet); Localdet.EVENT_DESCRIPTION_LOCAL_LANG = rr.Repair_Detail__c; Localdet.CUSTOMER_NAME_LOCAL_LANG = rr.HP_Name__c; Localdet.CUSTOMER_CITY_LOCAL_LANG = rr.Hospital__r.City_Master__r.Name; Localdet.CUSTOMER_ADDRESS_LOCAL_LANG = rr.HospitalAddress_formula__c; if (statu == 'R3') { if (rr.Return_Without_Repair_Date__c == null) { Localdet.CORRECTION_DESC_LOCAL_LANG = 'Routine repair; refer to Final Universal Code.'; }else if (rr.Return_Without_Repair_Date__c != null) { Localdet.CORRECTION_DESC_LOCAL_LANG = 'Return goods; no correction required.'; } } Localdet.DEPARTMENT_LOCAL_LANG = rr.Department_Name__c; Localdet.REPORTING_PERSON_LOCAL_LANG = rr.Incharge_Staff__r.Name__c; Localdet.STATE_LOCAL_LANG = 'Refer Address' ; Localdet.EVALUATION_RESULT_LOCAL_LANG = rr.Failure_Source__c; Localdet.OTHR_PROD_INVOLVED_LOCAL_LANG = rr.SupportingProducts__c ; Localdet.RECORD_INSERTED_DATE = NFMUtil.formatDate2Str(Date.today()); //AR_CODE RepairRequest.AR_CODE = new List(); if (String.isNotBlank(rr.ASReportedCode__c)) { List ARCODEList = rr.ASReportedCode__c.split(','); for(String str : ARCODEList){ Arcode_element Arcode = new Arcode_element(); RepairRequest.AR_CODE.add(Arcode); Arcode.AS_REPORTED_CODE = str; Arcode.AS_REPORTED_DESCRIPTION = ''; Arcode.RECORD_INSERTED_DATE = NFMUtil.formatDate2Str(Date.today()); } } //ANA_CAU_CODE RepairRequest.ANA_CAU_CODE = new List(); if (String.isNotBlank(rr.ASReportedCodeAC__c)) { List ANACODEList = rr.ASReportedCodeAC__c.split(','); for (String str : ANACODEList) { AanaCaucode_element AanaCaucode = new AanaCaucode_element(); RepairRequest.ANA_CAU_CODE.add(AanaCaucode); if (statu != 'R1') { AanaCaucode.AS_ANALYZED_CODE = str; } AanaCaucode.RECORD_INSERTED_DATE = NFMUtil.formatDate2Str(Date.today()); } } //ATTACHMENT RepairRequest.ATTACHMENT = new List(); List attList = rAMap.get(rr.id); if (attList != null && attList.size() > 0) { for(Attachment rpd : attList){ //2020-11-05 如果附件大小超过1.5mb 发送邮件提示 if (rpd.BodyLength > 1048576) { sendemail(rpd,'修理'+rr.Name); }else{ Attachment_element Attachmentdet = new Attachment_element(); RepairRequest.ATTACHMENT.add(Attachmentdet); Attachmentdet.FILE_DATA = EncodingUtil.base64Encode(rpd.body); Attachmentdet.ATTACHMENT_FIELD_NAME = 'COMPLAINTS_DOCUMENT_ATTACHMENT'; Attachmentdet.FILE_NAME = rpd.Name; Attachmentdet.GLOBAL_ATTRIBUTE1 = 'COMPLAINT'; Attachmentdet.RECORD_INSERTED_DATE = NFMUtil.formatDate2Str(Date.today()); } } } } // QIS 遍历生成数据 for (QIS_Report__c qr : qISList) { RepairRequest_element RepairRequest = new RepairRequest_element(); RepairRequest_elementdummy RepairRequestdummy = new RepairRequest_elementdummy(); quotations.GeneralData.add(RepairRequest); quotationsdummy.GeneralDatadummy.add(RepairRequestdummy); RepairRequestdummy.SYSTEM_SOURCEID = qr.Id; RepairRequestdummy.SYSTEM_STATUS = statu; RepairRequest.SYSTEM_SOURCE_REF_NO = qr.Name ; RepairRequest.SYSTEM_SOURCE = 'OCSM-SFDC' ; RepairRequest.ORDER_TYPE = qr.demo_or_asset__c == '购买' ? 'Purchased' : qr.demo_or_asset__c == '备品' ? 'Loaner' : null ; RepairRequest.CUSTOMER_RESPONSE_REQUESTED = 'N'; RepairRequest.NAME_OF_COMPETENT_AUTH = qr.Report_For_Goz__c == '有' ? 'Local PMPA' : null; RepairRequest.NEED_TO_RTRN_ITEM_TO_CUST = 'N'; RepairRequest.GLOBAL_ATTRIBUTE3 = String.valueOf(qr.Trable_occur_daY_collect__c); RepairRequest.INITIATOR = username; RepairRequest.EVENT_DATE = NFMUtil.formatDate2Str(qr.Faliour_date__c) ; RepairRequest.REPORTING_PERSON = null; RepairRequest.IS_THIS_COMPLAINT = 'Y' ; RepairRequest.EVENT_FOUND_AT = NFMUtil.getMapValue(transferMap, 'failuer_situation__c', qr.failuer_situation__c, iflog); RepairRequest.DEC_TREE_ANS_1 = NFMUtil.getMapValue(transferMap, 'ifDeadHurt__c', qr.Damage_For_Doc_Or_Pat__c, iflog); if (qr.Damage_For_Doc_Or_Pat__c == '无') { if (qr.PAE_DetermineResultsText__c == 'PAE') { RepairRequest.DEC_TREE_ANS_2 = 'Y' ; } if (qr.PAE_DetermineResultsText__c == 'nonPAE') { RepairRequest.DEC_TREE_ANS_2 = 'N' ; } if (qr.PAE_DetermineResultsText__c == 'Unknown') { RepairRequest.DEC_TREE_ANS_2 = 'U' ; } } RepairRequest.CUSTOMER_TELEPHONE = String.isBlank(qr.HospitalPhone__c) ? '/' : qr.HospitalPhone__c; RepairRequest.COUNTRY = 'China' ; RepairRequest.ITEM_CODE = qr.ProductCode_Ext__c ; if (qr.nonyushohin__c != null) { RepairRequest.LOT_SERIAL = qr.nonyushohin__r.unknow_serial_NO_product__c == true ? 'Unknown' : qr.lot_or_serial__c.indexOf('(') > 0 ? qr.lot_or_serial__c.subString(0,qr.lot_or_serial__c.indexOf('(')) : qr.lot_or_serial__c ; } RepairRequest.EVALUATION_RESULT = null ; RepairRequest.SYSTEM_SOURCE_2 = 'OSH-QIS'; RepairRequest.INITIATOR_LOCATION = 'Olympus Medical : OSH'; RepairRequest.ACTIONS_TAKEN_AT_CUST_SITE = NFMUtil.getMapValue(transferMap,'qis_next_action__c', qr.next_action__c, iflog) ; RepairRequest.INITIATION_DATE = NFMUtil.formatDate2Str(qr.QIS_Submit_day__c) ; // 精琢科技 2022-03-03 LJPH-CC5ANQ 【委托】之前会传一个1900-1-1的日期,导致报错,现在改为传null zxk start if(qr.QISInstallDate__c != null){ RepairRequest.INSTALLATION_DATE = NFMUtil.formatDate2Str(qr.QISInstallDate__c) ; }else{ RepairRequest.INSTALLATION_DATE = null; } // 精琢科技 2022-03-03 LJPH-CC5ANQ 【委托】之前会传一个1900-1-1的日期,导致报错,现在改为传null zxk end RepairRequest.EVENTDATE_UNKNOWN = null ; RepairRequest.SEND_REPORT_COMPETENT_AUTH = NFMUtil.getMapValue(transferMap,'ReportAdverseEvents__c', qr.Report_For_Goz__c, iflog) ; RepairRequest.PROC_THERAPEUTIC_DIAGNOSTIC = NFMUtil.getMapValue(transferMap,'WhatProject__c', qr.Which_Project__c, iflog) ; RepairRequest.GLOBAL_ATTRIBUTE1 = 'Olympus Medical : OSH' ; RepairRequest.GLOBAL_ATTRIBUTE4 = String.valueOf(qr.QIS_submit_date_for_MBC__c); RepairRequest.SYSTEM_SOURCE_REF_NO_2 = qr.QIS_no_for_m_BC__c; if ((qr.OCSM_Nogoods__c == false && qr.OCM_RC_RecievedDate__c != null) || (qr.OSH_Nogoods__c == false && qr.OSHRecievedDate__c != null)) { RepairRequest.PRODUCT_TO_BE_RETURNED = 'Y'; }else{ RepairRequest.PRODUCT_TO_BE_RETURNED = 'N'; } if (RepairRequest.PRODUCT_TO_BE_RETURNED == 'Y') { RepairRequest.PRODUCT_RECEIPT_DATE = NFMUtil.formatDate2Str(qr.Product_Receipt_Date__c); }else{ RepairRequest.PRODUCT_RECEIPT_DATE = null; } RepairRequest.RECORD_INSERTED_DATE = NFMUtil.formatDate2Str(Date.today()); // Locals RepairRequest.Local = new List(); Local_element Localdet = new Local_element(); RepairRequest.Local.add(Localdet); Localdet.EVENT_DESCRIPTION_LOCAL_LANG = qr.problem_detail__c; Localdet.CUSTOMER_CITY_LOCAL_LANG = qr.City_Master__c; Localdet.DEPARTMENT_LOCAL_LANG = qr.Department_Name__c; Localdet.STATE_LOCAL_LANG = 'Refer Address' ; Localdet.OTHR_PROD_INVOLVED_LOCAL_LANG = qr.accsessary_detail__c ; Localdet.RECORD_INSERTED_DATE = NFMUtil.formatDate2Str(Date.today()); Localdet.CDS_METHOD_LOCAL_LANG = '【使用频率】\n'+qr.usage_frequence__c+'\n【清洗消毒方法(方法,化学消毒剂)】\n'+qr.cds_methods__c+'\n【清洗】\n'+qr.cleanning__c+'\n【消毒】\n'+qr.disinfection__c+'\n【杀菌(温度及杀菌时间)】\n'+qr.sterlization__c; Localdet.REPORTING_PERSON_LOCAL_LANG = qr.Owner.Name; Localdet.CUSTOMER_NAME_LOCAL_LANG = qr.Hospital__r.Name; Localdet.CUSTOMER_ADDRESS_LOCAL_LANG = qr.Hospital__r.Address__c; // AR_CODE RepairRequest.AR_CODE = new List(); if (String.isNotBlank(qr.ASReportedCode__c)) { List arcodeList = qr.ASReportedCode__c.split(','); for(String str : arcodeList){ Arcode_element Arcode = new Arcode_element(); RepairRequest.AR_CODE.add(Arcode); Arcode.AS_REPORTED_CODE = str; Arcode.AS_REPORTED_DESCRIPTION = ''; Arcode.RECORD_INSERTED_DATE = NFMUtil.formatDate2Str(Date.today()); } } // ANA_CAU_CODE RepairRequest.ANA_CAU_CODE = new List(); if (String.isNotBlank(qr.ASReportedCodeAC__c)) { List ANACODEList = qr.ASReportedCodeAC__c.split(','); for (String str : ANACODEList) { AanaCaucode_element AanaCaucode = new AanaCaucode_element(); RepairRequest.ANA_CAU_CODE.add(AanaCaucode); if (statu != 'Q1') { AanaCaucode.AS_ANALYZED_CODE = str; } AanaCaucode.RECORD_INSERTED_DATE = NFMUtil.formatDate2Str(Date.today()); } } // ATTACHMENT RepairRequest.ATTACHMENT = new List(); List attList = rAMap.get(qr.id); if (attList != null && attList.size() > 0) { for(Attachment rpd :attList){ //2020-11-05 如果附件大小超过1.5mb 发送邮件提示 if (rpd.BodyLength > 1048576) { sendemail(rpd,'QIS '+qr.Name); }else{ Attachment_element Attachmentdet = new Attachment_element(); RepairRequest.ATTACHMENT.add(Attachmentdet); Attachmentdet.FILE_DATA = EncodingUtil.base64Encode(rpd.body); Attachmentdet.ATTACHMENT_FIELD_NAME = 'COMPLAINTS_DOCUMENT_ATTACHMENT'; Attachmentdet.FILE_NAME = rpd.Name; Attachmentdet.GLOBAL_ATTRIBUTE1 = 'COMPLAINT'; Attachmentdet.RECORD_INSERTED_DATE = NFMUtil.formatDate2Str(Date.today()); } } } if (statu == 'Q1') { RepairRequest.AWARE_DATE = NFMUtil.formatDate2Str(qr.Trable_occur_daY_collect__c); RepairRequest.ASSIGN_TO = 'OSH RA' ; }else if (statu == 'Q2') { if (qr.AE_DetermineResult__c == 'nonAE' && qr.PAE_Determine__c == 'nonPAE' && qr.PAE_DetermineAC__c == 'nonPAE') { RepairRequest.ASSIGN_TO = 'OSH QA'; }else{ RepairRequest.ASSIGN_TO = 'OSH RA'; } RepairRequest.EVALUATION_INITIATION_DATE = NFMUtil.formatDate2Str(Date.today()) ; RepairRequest.EVALUATION_INITIATION_BY = username; RepairRequest.AWARE_DATE = NFMUtil.formatDate2Str(qr.RC_inspection_date__c); Localdet.EVALUATION_RESULT_LOCAL_LANG = '【检测/分析情况详述】\n' + qr.QIS_Reply_Comment__c + '\n【第一次检测/分析情况详述】\n' + qr.QIS_Reply_Comment1__c + '\n【检测/分析情况详述(OSH)】\n' + qr.OSH_judgement__c ; }else if (statu == 'Q3') { RepairRequest.EVALUATION_INITIATION_DATE = NFMUtil.formatDate2Str(Date.today()) ; RepairRequest.EVALUATION_INITIATION_BY = username; RepairRequest.EVALUATION_COMPLETION_DATE = NFMUtil.formatDate2Str(Date.today()) ; RepairRequest.EVALUATION_COMPLETED_BY = username; RepairRequest.INVESTIGATION_DECISION_BY = username; RepairRequest.INVESTIGATION_DECISION_DATE = NFMUtil.formatDate2Str(Date.today()) ; RepairRequest.COMPLAINT_CLOSURE_DATE = NFMUtil.formatDate2Str(Date.today()); Localdet.EVALUATION_RESULT_LOCAL_LANG = '【检测/分析情况详述】\n' + qr.QIS_Reply_Comment__c + '\n【第一次检测/分析情况详述】\n' + qr.QIS_Reply_Comment1__c + '\n【检测/分析情况详述(OSH)】\n' + qr.OSH_judgement__c ; if (qr.next_action__c == '无偿更换') { RepairRequest.CORRECTION_ACTION = 'Exchange goods; no corrective action required.'; }else if (qr.next_action__c == '送回') { RepairRequest.CORRECTION_ACTION = 'Return goods; no corrective action required.'; }else { RepairRequest.CORRECTION_ACTION = 'Routine repair; no corrective action required.'; } RepairRequest.INVESTIGATION_REQUIRED = 'N'; RepairRequest.NO_INVESTIGATION_RATIONALE = 'This is a non-reportable malfunction complaint according to the RSS. This failure mode will be monitored through on-going trending.'; RepairRequest.COMPLAINT_CLOSED_BY = username; if (qr.next_action__c == '无偿更换') { Localdet.CORRECTION_DESC_LOCAL_LANG = 'Exchange goods; no correction required.'; }else if (qr.next_action__c == '送回') { Localdet.CORRECTION_DESC_LOCAL_LANG = 'Return goods; no correction required.'; }else { Localdet.CORRECTION_DESC_LOCAL_LANG = 'Routine repair; refer to Final Universal Code.'; } RepairRequest.ASSIGN_TO = null; } } String strrowDatatoETQ = JSON.serialize(quotations); System.debug('strrowDatatoETQ::'+strrowDatatoETQ); if (rowDataSFDC == null) { rowDataSFDC = NFMUtil.makeRowData(iflog, 'NFM401', quotationsdummy); } execute(strrowDatatoETQ,rowDataSFDC, iflog); logstr += 'Status:' + status; logstr += '\nend'; } catch (Exception ex) { // エラーが発生した場合 System.debug(Logginglevel.ERROR, 'NFM401_' + iflog.Name + ':' + ex.getMessage()); System.debug(Logginglevel.ERROR, 'NFM401_' + iflog.Name + ':' + ex.getStackTraceString()); logstr += ex.getMessage(); iflog.ErrorLog__c += ex.getMessage() + '\n'; iflog.ErrorLog__c += ex.getStackTraceString() + '\n'; } if (rowDataSFDC != null) { upsert rowDataSFDC; } iflog.Log__c = logstr; upsert iflog; } //add by rentx 2020-11-05 start //发送提示附件过大电子邮件 public static void SendEmail(Attachment rpd,String str){ // sendMails = new List(); //发送邮件 String title = ''; String body = ''; title = str+' 中的附件 '+rpd.Name+' 发送etq失败提醒'; body = '您好,'; body += '
'; body += str+'中的附件'+rpd.Name+'过大,导致发送ETQ失败!'; body += '
'; body += '请手动上传到ETQ'; List toMailList = new List(); List toccList = new List(); // emas.add(UserInfo.getUserEmail()); //收信人 toMailList.add(UserInfo.getUserEmail()); //抄送人 toccList.add('Hiroki_Hotta@olympus.com.cn'); toccList.add('olympus@prec-tech.com'); Messaging.SingleEmailMessage messageNEW = new Messaging.SingleEmailMessage(); messageNEW.subject = title; //messageNEW.plainTextBody = body; messageNEW.htmlBody = body; messageNEW.setCharset('UTF-8'); messageNEW.toAddresses = toMailList; messageNEW.ccAddresses = toccList; sendMails.add(messageNEW); } //add by rentx 2020-11-05 end // 手工调用处理方法 public static void executeAuto(BatchIF_Log__c rowData) { String rowDataStr = NFMUtil.getRowDataStr(rowData); RepairRequests_elementdummy quotationsdummy = (RepairRequests_elementdummy) JSON.deserialize(rowDataStr, RepairRequests_elementdummy.class); List repairOrQisidList = new List(); String statu = ''; for (RepairRequest_elementdummy infoGD : quotationsdummy.GeneralDatadummy) { if (String.isNotBlank(infoGD.SYSTEM_SOURCEID)) { repairOrQisidList.add(infoGD.SYSTEM_SOURCEID); } statu = infoGD.SYSTEM_STATUS; } System.debug(Logginglevel.ERROR, 'repairOrQisidList_: ' + repairOrQisidList); callout(null,rowData,repairOrQisidList,statu); } public static void execute(String strrowDatatoETQ, BatchIF_Log__c rowDataSFDC, BatchIF_Log__c iflog) { Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt); // String logstr = rowDataSFDC.MessageGroupNumber__c + ' start\n'; logstr += rowDataSFDC.MessageGroupNumber__c + ' start\n'; Boolean needUpdateIflog = false; if (iflog == null) { needUpdateIflog = true; iflog = new BatchIF_Log__c(); iflog.Type__c = 'NFM401'; iflog.MessageGroupNumber__c = rowDataSFDC.MessageGroupNumber__c; iflog.Log__c = logstr; iflog.ErrorLog__c = ''; } else { logstr = iflog.Log__c; } try{ // 向SPO送信 status = NFMUtil.sendToETQ(strrowDatatoETQ, NFMUtil.NFM401_ENDPOINT); if (status == 'OK') { rowDataSFDC.retry_cnt__c = 0; } else { if (rowDataSFDC.retry_cnt__c == null) rowDataSFDC.retry_cnt__c = 0; if (rowDataSFDC.retry_cnt__c < batch_retry_max_cnt) { rowDataSFDC.retry_cnt__c++; LogAutoSendSchedule.assignOneMinute(); } if (rowDataSFDC.retry_cnt__c >= batch_retry_max_cnt) { rowDataSFDC.ErrorLog__c = 'status:' + status + '\n错误次数已经超过自动送信设定的最大次数,请手动送信'; } } } catch (Exception ex) { // TODO IOException // エラーが発生した場合 System.debug(Logginglevel.ERROR, 'NFM001_' + iflog.Name + ':' + ex.getMessage()); System.debug(Logginglevel.ERROR, 'NFM001_' + iflog.Name + ':' + ex.getStackTraceString()); logstr += ex.getMessage(); iflog.ErrorLog__c += ex.getMessage() + '\n'; iflog.ErrorLog__c += ex.getStackTraceString() + '\n'; if (rowDataSFDC.retry_cnt__c == null) rowDataSFDC.retry_cnt__c = 0; if (rowDataSFDC.retry_cnt__c < batch_retry_max_cnt) { rowDataSFDC.retry_cnt__c++; LogAutoSendSchedule.assignOneMinute(); } if (rowDataSFDC.retry_cnt__c >= batch_retry_max_cnt) { rowDataSFDC.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + rowDataSFDC.ErrorLog__c+'错误次数已经超过自动送信设定的最大次数,请手动送信'; } } //add by rentx 2020-11-05 start if (sendMails.size() > 0) { for(Messaging.SingleEmailMessage mc : sendMails){ List tempsendMails = new List(); tempsendMails.add(mc); Messaging.SendEmailResult[] results = messaging.sendEmail(tempsendMails); if (results!= null && results.size() > 0) { for (Integer i = 0; i < results.size(); i++) { if (results[i].success == false) { logstr += '邮件 '+ mc.subject+' 发送失败'; }else{ logstr+= '邮件 '+ mc.subject+' 邮件发送成功!'; } } } } // sendMails = new List(); } //add by rentx 2020-11-05 end iflog.Log__c = logstr; System.debug('logdate2' + rowDataSFDC); upsert iflog; upsert rowDataSFDC; } }