/********************************************************************** * * * @url: /services/apexrest/NFM623Rest * @data: * { } *************************************************************************/ @RestResource(urlMapping = '/NFM623/*') global with sharing class NFM623Rest { //add to AWS 回复 start sushanhu 20220225 static Boolean SFStatus=true; static String SFMessage=''; //add to AWS 回复 end sushanhu 20220225 //新增NFM623Rest 学会·活动参加人员接收数据接口 精琢技术 start global class GeDatas { public NFMUtil.Monitoring Monitoring; public GeData[] GeData; } global class GeData { public String Num; // 活动编码 public String Name; // 活动名称 public ViewContactIdS[] ViewContactIdS; //替换为aws存储凭据ID 20220225 sushanhu public LabelTypeS[] LabelTypeS; } global class ViewContactIdS { public String ViewContactId; // 直播观看统一用户ID } global class LabelTypeS { public String LabelType; // 标签分类 public String Label; // 标签内容 } @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, 'NFM623', 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":""}'; // res.responseBody = blob.valueOf(jsonResponse); //updata response toAWS 20220225 sushanhu start NFMUtil.NFMResponse result = NFMUtil.getNFMResponse(); result.SFStatus=SFStatus; result.SFMessage=SFMessage; String jsonResponse =JSON.serialize(result); system.debug('result---'+jsonResponse); res.responseBody = blob.valueOf(jsonResponse); //updata response toAWS 20220225 sushanhu end 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 = 'NFM623'; 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 camInsList = new List(); List camMemInsList = new List(); List camLabInsList = new List(); //将市场活动编码存入List,统一用户ID存如Map List camNoList = new List(); List conIDListNew = new List(); Map conIDMapNew = new Map(); List geDataListNew = new List(); for (GeData geData : geDataList) { if (String.isBlank(geData.Num)) { //必須項目がない場合、処理と飛ばす iflog.ErrorLog__c += '活动编码不能为空。\n'; continue; } if (geData.ViewContactIdS == null || geData.ViewContactIdS.size() == 0) { //必須項目がない場合、処理と飛ばす iflog.ErrorLog__c += '统一用户ID不能为空。\n'; continue; } for (ViewContactIdS viewConIdS : geData.ViewContactIdS) { conIDListNew.add(viewConIdS.ViewContactId); conIDMapNew.put(geData.Num, viewConIdS.ViewContactId); } camNoList.add(geData.Num); geDataListNew.add(geData); } //使用统一用户ID获取客户人员ID、客户人员姓名、医院科室存入Map Map contactMap = new Map(); List conIDList = new List(); if (conIDMapNew.size() > 0) { List contactList = [select Id,Name,UnifiedI_Contact_ID__c, AccountId,Account.Name from Contact where UnifiedI_Contact_ID__c in :conIDListNew]; if (contactList.size() > 0) { //客户人员ID获取成功 for (Contact conInfo : contactList) { contactMap.put(conInfo.UnifiedI_Contact_ID__c, conInfo); conIDList.add(conInfo.Id); } } //update to 通过aws存储的unified查询 start 20220225 // List contactList = [select Id,Name,AWS_UnifiedI_Contact_ID__c, // AccountId,Account.Name // from Contact where AWS_UnifiedI_Contact_ID__c in :conIDListNew]; // if (contactList.size() > 0) { // //客户人员ID获取成功 // for (Contact conInfo : contactList) { // contactMap.put(conInfo.AWS_UnifiedI_Contact_ID__c, conInfo); // conIDList.add(conInfo.Id); // } // } //update to 通过aws存储的unified查询 20220225 end } //使用市场活动编码获取市场活动ID和活动名称存入Map List camIDList = new List(); Map camOldMap = new Map(); List campList = [select Id, Num__c, Name2__c from Campaign where Num__c in :camNoList]; if (campList.size() > 0) { //市场活动ID获取成功 for (Campaign camInfo : campList) { camIDList.add(camInfo.Id); camOldMap.put(camInfo.Num__c, camInfo); } } //查询已经存在的市场活动编码下的参会人员ID和统一用户ID List camMemberList = [select Id,Contact_ID__c,ViewContactId__c, Campaign__c,Campaign__r.Num__c from CampaignMember__c where Campaign__c in : camIDList]; Map camContactMap = new Map(); Map camViewContactMap = new Map(); if (camMemberList.size() > 0 ) { for (CampaignMember__c cm : camMemberList) { camContactMap.put(cm.Contact_ID__c, cm.Campaign__r.Num__c); camViewContactMap.put(cm.ViewContactId__c, cm.Campaign__r.Num__c); } } //update to 获取aws 统一凭据关联 sushanhu 20220225 satrt // List camMemberList = [select Id,Contact_ID__c,AWS_ViewContact_Id__c, // Campaign__c,Campaign__r.Num__c // from CampaignMember__c where Campaign__c in : camIDList]; // Map camContactMap = new Map(); // Map camViewContactMap = new Map(); // if (camMemberList.size() > 0 ) { // for (CampaignMember__c cm : camMemberList) { // camContactMap.put(cm.Contact_ID__c, cm.Campaign__r.Num__c); // camViewContactMap.put(cm.AWS_ViewContact_Id__c, cm.Campaign__r.Num__c); // } // } //update to 获取aws 统一凭据关联 sushanhu 20220225 end //将原有活动标签对象中市场活动ID和标签活动名称存入Map中 List camLabInfoList = [select id,name,Campaign__c,Lable__c,LableType__c from CampaignLable__c where Campaign__c in : camIDList]; Map camLabInfoMap = new Map(); if (camLabInfoList.size() > 0) { for (CampaignLable__c camLabIn : camLabInfoList) { camLabInfoMap.put(camLabIn.Name,camLabIn.Id); } } // 将XML各数据项更新到市场活动、学会・活动参加人员及活动标签对象中 for (GeData geData : geDataListNew) { if (camOldMap.get(geData.Num) == null) { iflog.ErrorLog__c += '市场活动编码' + geData.Num +':不存在\n'; continue; } //插入学会参会人员对象 for (ViewContactIdS viewConIdS : geData.ViewContactIdS) { CampaignMember__c camMemberInfo = new CampaignMember__c(); if (contactMap.get(viewConIdS.ViewContactId) != null) { if (camContactMap.get(contactMap.get(viewConIdS.ViewContactId).ID) != geData.Num) { camMemberInfo.Contact_ID__c = contactMap.get(viewConIdS.ViewContactId).ID; //参会人员ID camMemberInfo.Campaign__c = camOldMap.get(geData.Num).ID; //活动ID camMemberInfo.Department_ID__c = contactMap.get(viewConIdS.ViewContactId).AccountId; //医院科室 camMemberInfo.Department__c = contactMap.get(viewConIdS.ViewContactId).Account.Name; //医院科室(文本) camMemberInfo.Contact__c = contactMap.get(viewConIdS.ViewContactId).Name; //客户人员姓名 camMemInsList.add(camMemberInfo); } } else { if (camViewContactMap.get(viewConIdS.ViewContactId) != geData.Num) { camMemberInfo.Campaign__c = camOldMap.get(geData.Num).ID; camMemberInfo.ViewContactId__c = viewConIdS.ViewContactId; camMemInsList.add(camMemberInfo); } } } //插入活动标签对象 for (LabelTypeS labelTypeS : geData.LabelTypeS) { List lableList = labelTypeS.Label.split(';'); if (lableList.size() > 0) { for (Integer i= 0 ; i < lableList.size(); i++) { CampaignLable__c campaignLable = new CampaignLable__c(); if (camOldMap.get(geData.Num) != null ) { campaignLable.Campaign__c = camOldMap.get(geData.Num).ID; campaignLable.LableType__c = labelTypeS.LabelType; campaignLable.Lable__c = lableList[i]; campaignLable.Name = campaignLable.LableType__c+'-'+campaignLable.Lable__c; if (String.isBlank(camLabInfoMap.get(campaignLable.Name))) { camLabInsList.add(campaignLable); } } } } } } if (camMemInsList.size() > 0) { upsert camMemInsList; logstr += '学会参会人员更新成功。\n'; } if (camLabInsList.size() > 0) { insert camLabInsList; logstr += '活动标签更新成功。\n'; } logstr += '\nend'; rowData.retry_cnt__c = 0; } catch (Exception ex) { // エラーが発生した場合 Database.rollback(sp); System.debug(Logginglevel.ERROR, 'NFM623_' + rowData.MessageGroupNumber__c + ':' + ex.getMessage()); System.debug(Logginglevel.ERROR, 'NFM623_' + 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; } //新增NMF623接口 精琢技术 end }