/********************************************************************** * * * @url: /services/apexrest/rest * @data: * { } *************************************************************************/ @RestResource(urlMapping='/RVS005/*') global with sharing class RVS005Rest { global class InspectionResults{ public NFMUtil.Monitoring Monitoring; // public InspectionResult[] Partners; public InspectionResult InspectionResult; } global class InspectionResult{ public String SAPRepairNotificationNo; // SAP修理单号 public String RVSDetailNo; // RVS的警告管理Key public String LocationGroupDesc; // 部位1名称 public String LocationDesc; // 部位2名称 public String Description; // 新现象描述 public String DetermineDate; // RVS决定日期 public String DetermineTime; // RVS决定时间 public String DeterminePerson; // RVS决定者 } @HttpPost global static void execute() { // 取得接口传输内容 String strData = RestContext.request.requestBody.toString(); InspectionResults ges = (InspectionResults) JSON.deserializeStrict(strData, InspectionResults.class); if (ges == null ) { return; } NFMUtil.Monitoring Monitoring = ges.Monitoring; if (Monitoring == null) { return; } BatchIF_Log__c rowData = NFMUtil.saveRowData(Monitoring, 'RVS005', ges.InspectionResult); 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": "OK", "ErrItem":"","ErrMsg":""}'; 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 = 'RVS005'; iflog.MessageGroupNumber__c = rowData.MessageGroupNumber__c; iflog.Log__c = logstr; iflog.ErrorLog__c = ''; insert iflog; String rowDataStr = NFMUtil.getRowDataStr(rowData); InspectionResult res = (InspectionResult) JSON.deserialize(rowDataStr, InspectionResult.class); if (res == null) { return; } // List inspectionResultList = (List) JSON.deserialize(rowDataStr, List.class); List inspectionResultList = new List(); inspectionResultList.add(res); // if (inspectionResultList == null || inspectionResultList.size() == 0) { // return; // } Savepoint sp = Database.setSavepoint(); try { // 获取SAP修理单号 Set repairCodeList = new Set(); for (inspectionResult ins : inspectionResultList) { if (String.isBlank(ins.SAPRepairNotificationNo)) { continue; } // if (String.isBlank(ins.RVSDetailNo)) { // continue; // } repairCodeList.add(ins.SAPRepairNotificationNo); } // 获取修理信息 Map repairidMap = new Map(); List repairList =[select Id,SAP_Service_Repair_No__c from Repair__c where SAP_Service_Repair_No__c in :repairCodeList]; for (Repair__c re : repairList) { repairidMap.put(re.SAP_Service_Repair_No__c, re); } // Map repairConfirmMap = new Map(); Map pAEDeMap = new Map(); List pddList = [select Id,PAED_Repair__r.SAP_Service_Repair_No__c, RVSDetailNo__c, LocationGroup__c, Location__c, Description__c, Cause__c, PAE_Judge__c, EtqPart__c, RVS_Decision_Person__c, RVS_Date__c, RVS_Time__c from PAE_DecisionRecordDetail__c where PAED_Repair__r.SAP_Service_Repair_No__c in :repairCodeList]; for (PAE_DecisionRecordDetail__c pdd : pddList) { // if (!repairConfirmMap.containsKey(pdd.PAED_Repair__r.SAP_Service_Repair_No__c)) { // repairConfirmMap.put(pdd.PAED_Repair__r.SAP_Service_Repair_No__c, pdd); // } if (!pAEDeMap.containsKey(pdd.PAED_Repair__r.SAP_Service_Repair_No__c + pdd.RVSDetailNo__c + '')) { pAEDeMap.put(pdd.PAED_Repair__r.SAP_Service_Repair_No__c + pdd.RVSDetailNo__c + '', pdd); } } // 20201123 gzw add // 修理对应的PAE判定记录 final List dbPAEDecisionRecordList = [select id,PAE_reappear_confirm__c,LastModifiedDate,PAE_Repair__c ,PAE_Repair__r.SAP_Service_Repair_No__c from PAE_DecisionRecord__c where PAE_Repair__r.SAP_Service_Repair_No__c in :repairCodeList and recordType.DeveloperName = 'ASACDecision' order by LastModifiedDate desc]; // 修理对应的最新Final的PAE判定记录 Map repPaeRecordMap = new Map(); for (PAE_DecisionRecord__c ele : dbPAEDecisionRecordList) { if (!repPaeRecordMap.containsKey(ele.PAE_Repair__r.SAP_Service_Repair_No__c) ) { repPaeRecordMap.put(ele.PAE_Repair__r.SAP_Service_Repair_No__c,ele); } } List updateList = new List(); // 20201124 gzw add 更新修理 RVS005来的时候,清空OCSM Coding的PAE判定。 List reList = new List(); Map> insertMap = new Map>(); Map newPAEMap = new Map(); for (inspectionResult ins : inspectionResultList) { if (repairidMap.containsKey(ins.SAPRepairNotificationNo) == false) { iflog.ErrorLog__c += 'Error! SAPNo[' + ins.SAPRepairNotificationNo + ']NotExist. This Repair is skipped.\n'; continue; } PAE_DecisionRecordDetail__c upPAEde; upPAEde = pAEDeMap.get(ins.SAPRepairNotificationNo + ins.RVSDetailNo + ''); if (upPAEde == null) { upPAEde = new PAE_DecisionRecordDetail__c(); PAE_DecisionRecord__c newPAERecord = new PAE_DecisionRecord__c(); if (repPaeRecordMap.containsKey(ins.SAPRepairNotificationNo)) { newPAERecord = repPaeRecordMap.get(ins.SAPRepairNotificationNo); }else{ newPAERecord.RecordTypeId = Schema.SObjectType.PAE_DecisionRecord__c.getRecordTypeInfosByDeveloperName().get('ASACDecision').getRecordTypeId(); newPAERecord.PAE_Repair__c = repairidMap.get(ins.SAPRepairNotificationNo).Id; } // newPAERecord.RecordTypeId = Schema.SObjectType.PAE_DecisionRecord__c.getRecordTypeInfosByDeveloperName().get('ASACDecision').getRecordTypeId(); // newPAERecord.PAE_Repair__c = repairidMap.get(ins.SAPRepairNotificationNo); newPAEMap.put(ins.SAPRepairNotificationNo, newPAERecord); List pAEddtemp = new List(); if (insertMap.containsKey(ins.SAPRepairNotificationNo)) { pAEddtemp = insertMap.get(ins.SAPRepairNotificationNo); } pAEddtemp.add(upPAEde); // 获取需要插入的判断明细 insertMap.put(ins.SAPRepairNotificationNo, pAEddtemp); }else{ // 获取需要更新的判断明细 updateList.add(upPAEde); } upPAEde.RecordTypeId = Schema.SObjectType.PAE_DecisionRecordDetail__c.getRecordTypeInfosByDeveloperName().get('final').getRecordTypeId(); upPAEde.PAED_RCAC__c = 'Final'; upPAEde.PAED_Repair__c = repairidMap.get(ins.SAPRepairNotificationNo).Id; upPAEde.RVSDetailNo__c = ins.RVSDetailNo; upPAEde.LocationGroup__c = ins.LocationGroupDesc; upPAEde.Location__c = ins.LocationDesc; // 2020/08/03 taoqz start // upPAEde.Description__c = ins.Description; upPAEde.PhenomenonDesc__c = ins.Description; // 2020/08/03 taoqz end upPAEde.RVS_Date__c = NFMUtil.parseStr2Date(ins.DetermineDate); //update by rentongxiao 2020101009 start // upPAEde.RVS_Time__c = null ; // //转为时间格式 upPAEde.RVS_Time__c = NFMUtil.parseStr2Time(ins.DetermineTime); //update by rentongxiao 2020101009 end // 20201123 by gzw 式样变更 start // puPAEde.EtqPart__c = ins.DeterminePerson ; upPAEde.RVS_Decision_Person__c = ins.DeterminePerson ; // 20201123 by gzw 式样变更 end Repair__c re = repairidMap.get(ins.SAPRepairNotificationNo); re.PAE_DetermineAC__c = null; reList.add(re); } if (reList.size() > 0) { update reList; } if (updateList.size() > 0) { update updateList; } if (newPAEMap.size() > 0) { upsert newPAEMap.values(); } if (insertMap.size() > 0) { System.debug('insertMap +++++'); List instemp = new List(); for (String str: insertMap.keySet()) { for (PAE_DecisionRecordDetail__c pdd : insertMap.get(str)) { pdd.PAE_DecisionRecordD__c = newPAEMap.get(str).Id; instemp.add(pdd); } } System.debug('instemp +++++' + instemp); // instemp.addAll(insertMap.values()); insert instemp; } logstr += '\nend'; rowData.retry_cnt__c=0; } catch (Exception ex) { Database.rollback(sp); 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(); } else { 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; } }